C++中sizeof运算符使用结果异常:计算值与实际不符的原因咨询
关于sizeof()结果与手动计算不符的原因
这是内存对齐导致的,编译器为了让CPU更高效地访问内存,会自动给结构体(或其他复合类型)的成员填充空白字节,最终整个类型的大小也会是其内部最大对齐单位的整数倍。
举个符合你情况的例子:假设你的command是个结构体,成员总字节数加起来是26,但其中存在像int(通常4字节对齐)这类有对齐要求的类型。比如:
struct Command { char cmd_name[12]; // 12字节,刚好是4的倍数 int cmd_id; // 4字节,直接接在12字节后,此时总大小16 char args[10]; // 10字节,加完后总大小26 };
这里结构体的最大对齐单位是int的4字节,26不是4的整数倍,编译器会在末尾填充2个空白字节,最终sizeof(command)就变成了28。
再比如如果成员顺序导致中间需要填充:比如把char args[10]放在int cmd_id前面,那10字节后要填充2字节才能满足int的4字节对齐,此时总大小就是10+2+4+12=28,同样会出现成员总和26但实际sizeof是28的情况。
简单说,手动计算的只是成员实际数据的字节数,但编译器会为了内存访问效率自动填充空白字节,最终的大小要满足对齐规则。
内容的提问来源于stack exchange,提问作者Ziad Hawsawi
相关产品推荐
相关产品推荐

