gpt4 book ai didi

C++ 编译器对齐 - 仅字符无填充

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

在 VC++ 上,为什么编译器只在使用非字符数据类型时填充结构?

struct TEST
{
char a[7];
};

struct TEST2
{
__int32 a;
char b[7];
};

sizeof(TEST); // Returns 7
sizeof(TEST2); // Returns 12

最佳答案

归根结底是 sizeof(char) == 1 —— 始终如此。

数组必须是连续的,因此在一个 char 数组中(如果它足够大),您最终会在所有可能的对齐方式中得到元素。由于编译器/硬件必须使其工作,因此不能需要插入填充来处理 char 之类的东西struct 任一个。

现在,这并不是说编译器不能插入填充。例如,即使使用 char 数组,它也可以通过这样做来提高性能。例如,给定您的 struct 定义,编译器完全可以接受将 7 个字符的数组再填充一个,使结构的大小为 8 —— 一个漂亮、简洁的 2 的幂。

在某些硬件上,您可能会看到它。碰巧的是,VC++ 支持的 Intel 硬件并没有真正从类似的东西中受益,所以你不太可能在那里看到它。

关于C++ 编译器对齐 - 仅字符无填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043486/

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