【发布时间】:2012-03-15 09:44:50
【问题描述】:
我一直从事的项目涉及移植一些旧代码。现在我们正在使用 VS2010,但项目设置为使用 VS2008 编译器和工具链,但最终我们可能会一直使用 VS2010 工具链。有问题的结构如下所示:
struct HuffmanDecodeNode
{
union
{
TCHAR cSymbol;
struct
{
WORD nOneIndex;
WORD nZeroIndex;
} cChildren;
} uNodeData;
BYTE bLeaf;
}
由于我不会深入讨论的原因,sizeof(HuffmanDecodeNode) 需要为 8。我假设在旧编译器上这可以正确解决,但现在我看到大小为 6,除非我加入一些填充字节。 #pragma pack(show) 确认数据应该是 4 字节对齐的,我认为这已经足够了,但似乎较新的编译器仅使用它进行对齐,并且不会在结构的末尾插入任何尾随填充。
有没有什么方法可以控制尾随填充而无需只添加更多的结构成员?
【问题讨论】:
-
那是一个非常奇怪的编译器,不出所料,它不再使用了。与您现在拥有的那个作斗争毫无意义,#pragma pack 无法完成工作。只需添加两个虚拟字节或一个单词即可完成。
标签: c++ visual-studio-2010 visual-studio-2008 visual-c++ memory-alignment