我已经从一个文件中获取了VERSIONINFO结构,并且值(VS_FIXEDFILEINFO)被填充了32位。
根据MSDN,应该将值添加到32位边界上。
Padding1 类型: WORD 包含在32位边界上对值成员所必需的任意多个零字。
但是值已经在32位的边界上了。
为什么VS_FIXEDFILEINFO在32位边界上填充了32位呢?
要对齐32位边界上的数据,只有填充少于32位才有意义。
我之所以这样问是因为我需要解析一个RC脚本并生成这个资源。

发布于 2015-01-21 14:16:41
填充被添加到结构及其成员中,这样CPU就可以访问内存,使用与CPU的字宽对齐的地址来保存那些成员。
回到黑暗时代,一些CPU可能会被说服生成一个总线错误,如果你做了一个不结盟的访问,但现在它只是更慢,特别是如果你错过了机上的缓存。
VS_FIXEDFILEINFO是任意长度的任意数据,因此在它之后可能会出现一些填充,以使后续的VS_VERSIONINFO结构成员重新对齐。
MS的wLength成员VS_VERSIONINFO文档的措辞意味着您不应该考虑在正在查看的VS_VERSIONINFO和内存中的下一个VS_VERSIONINFO之间填充。也就是说,不要从第一个结构中减去下一个结构的地址,并将其用作wLength,因为您可能会在两个不需要的结构之间引入一些填充字节。
https://stackoverflow.com/questions/28068630
复制相似问题