VS_VERSIONINFO 结构 - 不必要的填充
VS_VERSIONINFO structure - unnecessary padding
我从文件中获取了 VS_VERSIONINFO 结构,并且值 (VS_FIXEDFILEINFO) 被填充了 32 位。
根据 MSDN,应该填充值以落在 32 位边界上。
Padding1
Type: WORD
Contains as many zero words as necessary to align the Value member on a 32-bit boundary.
但是值已经在 32 位边界上。
无论如何,为什么 VS_FIXEDFILEINFO 在 32 位边界上用 32 位填充?
要在 32 位边界上对齐数据,只有少于 32 位的填充才有意义。
我问这个是因为我需要解析 RC 脚本并生成此资源。
向结构及其成员添加填充,以便 CPU 可以使用与 CPU 的字宽对齐的地址访问包含这些成员的内存。
在黑暗的日子里,如果您进行了非对齐访问,一些 CPU 可能会被说服生成总线错误,但现在它变得更慢,特别是如果您错过了板载缓存。
VS_FIXEDFILEINFO
是任意长度的任意数据,因此一些填充 可能 出现在它之后以使后续的 VS_VERSIONINFO
结构成员重新对齐。
VS_VERSIONINFO
的 wLength
成员的 MS 文档的措辞暗示您不应考虑在您正在查看的 VS_VERSIONINFO
和中的下一个成员之间进行填充记忆。也就是说,不要从第一个结构中减去下一个结构的地址并将其用作 wLength
,因为您可能会在两个结构之间引入一些不需要的填充字节。
我从文件中获取了 VS_VERSIONINFO 结构,并且值 (VS_FIXEDFILEINFO) 被填充了 32 位。
根据 MSDN,应该填充值以落在 32 位边界上。
Padding1
Type: WORD
Contains as many zero words as necessary to align the Value member on a 32-bit boundary.
但是值已经在 32 位边界上。
无论如何,为什么 VS_FIXEDFILEINFO 在 32 位边界上用 32 位填充?
要在 32 位边界上对齐数据,只有少于 32 位的填充才有意义。
我问这个是因为我需要解析 RC 脚本并生成此资源。
向结构及其成员添加填充,以便 CPU 可以使用与 CPU 的字宽对齐的地址访问包含这些成员的内存。
在黑暗的日子里,如果您进行了非对齐访问,一些 CPU 可能会被说服生成总线错误,但现在它变得更慢,特别是如果您错过了板载缓存。
VS_FIXEDFILEINFO
是任意长度的任意数据,因此一些填充 可能 出现在它之后以使后续的 VS_VERSIONINFO
结构成员重新对齐。
VS_VERSIONINFO
的 wLength
成员的 MS 文档的措辞暗示您不应考虑在您正在查看的 VS_VERSIONINFO
和中的下一个成员之间进行填充记忆。也就是说,不要从第一个结构中减去下一个结构的地址并将其用作 wLength
,因为您可能会在两个结构之间引入一些不需要的填充字节。