【发布时间】:2013-03-06 04:40:28
【问题描述】:
我的代码中有这个结构:
struct BlockDescriptor
{
struct BlockDescriptor * pNext;
bool _isFree;
};
我倾向于相信它的大小是 4 + 1 = 5(4 代表指针,1 代表 bool),但由于某种原因 sizeof(struct BlockDescriptor) 返回 8 !有人能告诉我为什么吗?
是因为打包问题,5 被四舍五入为 4 的倍数(因为 32 位是大多数计算机最熟悉的),是否有某种方法可以强制它使用真实大小(如果在事实上真实大小)?
【问题讨论】:
-
pNext和_isFree之间的填充。您可以通过特定于编译器的机制强制“打包”。 -
将#pragma pack(1) 放在结构定义之前。
-
为什么
sizeof(struct BlockDescriptor)返回的内容对您很重要? -
@LukaRahne 谢谢你的工作
-
更改结构中成员的顺序:bool;结构*;你可能会得到 5 个字节,但这是特定于编译器的
标签: c++ memory alignment sizeof memory-alignment