0

我从文件中获取了VS_VERSIONINFO结构,并且值 (VS_FIXEDFILEINFO) 填充了 32 位。

根据 MSDN,应填充值以落在 32 位边界上。

填充1

类型:字

包含尽可能多的零字,以在 32 位边界上对齐 Value 成员。

但是 value 已经在 32 位边界上。
无论如何,为什么 VS_FIXEDFILEINFO 在 32 位边界上填充 32 位?
要在 32 位边界上对齐数据,只有小于 32 位的填充才有意义。

我问这个是因为我需要解析一个 RC 脚本并生成这个资源。

在此处输入图像描述

4

1 回答 1

2

将填充添加到结构及其成员中,以便 CPU 可以使用与 CPU 字宽对齐的地址访问保存这些成员的内存。

在黑暗的日子里,如果你进行非对齐访问,一些 CPU 可能会被说服产生总线错误,但现在它只是变慢了,特别是如果你错过了板载缓存。

VS_FIXEDFILEINFO是任意长度的任意数据,因此在它之后可能会出现一些填充,以使后续VS_VERSIONINFO结构成员重新对齐。

MS 的wLength成员文档的措辞VS_VERSIONINFO暗示您不应该考虑在VS_VERSIONINFO您正在查看的内容和内存中的下一个内容之间进行填充。即不要从第一个结构中减去下一个结构的地址并使用它,wLength因为您可能会在您不想要的两个结构之间引入一些填充字节。

于 2015-01-21T14:16:41.960 回答