gpt4 book ai didi

c++ - 为什么不消除关于此结构的填充字节的需要?

转载 作者:行者123 更新时间:2023-11-30 00:36:36 24 4
gpt4 key购买 nike

考虑以下简单结构:

struct Struct {
public:
char a;
short int b;
char c;
};

如果此结构的实例放置在偶数(16 位对齐)地址,则需要两个填充字节来固定对齐(对于 b 和数组中的任何后续实例) ).

但是,实例可以放置在一个奇数地址,然后即使没有填充字节,对齐仍然是正确的。

所以我做了一个测试,观察到 Visual C++ 2010 将添加这两个填充字节,这表明它总是将它们放在偶数地址。

为什么 VC++ 不将它们放在奇数地址,每个对象节省 2 个字节?有什么我不知道的吗?

最佳答案

的确,如果该结构的布局没有填充,那么它可能会被放置在一个奇数地址,并且它的每个成员都会单独地正确对齐。

问题在于编译器如何将其放置在一个奇数地址。当然可以安排一个自动存储的变量。但是由 malloc 分配的堆分配变量呢? malloc 遵循的约定是它必须返回一 block 内存,该内存块与任何类型的对象都正确对齐。如果有一些对象需要放置在奇数地址,malloc 永远无法做到这一点。

关于c++ - 为什么不消除关于此结构的填充字节的需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com