VS_VERSIONINFO结构 - 不必要的填充

时间:2015-01-21 13:37:19

标签: data-structures padding memory-alignment resource-files versioninfo

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

根据MSDN,值应填充到32位边界。

  

Padding1

     

键入:WORD

     

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

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

wLength VS_VERSIONINFO VS_VERSIONINFO成员的MS文档的措辞意味着您不应该考虑在您wLength之间进行填充在记忆中的下一个。即,不要从第一个结构中减去下一个结构的地址,并将其用作{{1}},因为你可能会在两个你不想要的结构之间引入一些填充字节。