我从文件中取出了VS_VERSIONINFO结构,并且用32位填充了值(VS_FIXEDFILEINFO)。
根据MSDN,值应填充到32位边界。
Padding1
键入:WORD
根据需要包含尽可能多的零字,以便在32位边界上对齐Value成员。
但是价值已经在32位边界上了 无论如何,为什么VS_FIXEDFILEINFO在32位边界上用32位填充? 要在32位边界上对齐数据,只有少于32位的填充才有意义。
我问这个是因为我需要解析一个RC脚本并生成这个资源。
答案 0 :(得分:2)
填充添加到结构及其成员中,以便CPU可以使用与CPU的字宽对齐的地址访问保存这些成员的内存。
在黑暗的日子里,如果你进行了非对齐访问,可能会说服某些CPU产生总线错误但是现在它只是速度慢,特别是如果你错过了板载缓存。
VS_FIXEDFILEINFO
是任意长度的任意数据,因此在它之后会出现一些填充 以使后续的VS_VERSIONINFO
结构成员重新对齐。
wLength
VS_VERSIONINFO
VS_VERSIONINFO
成员的MS文档的措辞意味着您不应该考虑在您wLength
之间进行填充在记忆中的下一个。即,不要从第一个结构中减去下一个结构的地址,并将其用作{{1}},因为你可能会在两个你不想要的结构之间引入一些填充字节。