gpt4 book ai didi

c++ - 利用否则浪费的填充空间

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

以下结构 X 有 3 个字节的有效负载和 1 个字节的填充:

struct X
{
short a;
char b;
};

memory layout: aab.

以下结构 Y 有 4 个字节的有效负载和 2 个字节的填充:

struct Y
{
X x;
char c;
};

memory layout: aab.c.

有什么方法可以让 X 嵌套在 Y 中并让 sizeof(X) == 4 && sizeof(Y) == 4?

memory layout: aabc

理想情况下,我希望对所有类型 X 进行这种空间优化(将 X 视为模板参数)。

最佳答案

这是一个编译器设置。在某些情况下,为了使内存访问正常工作,填充是必需的。在某些体系结构中,这是一个效率问题,在其他体系结构中,如果未正确对齐,程序将崩溃。在这种情况下,您有 16 位对齐,直接在奇数地址上访问 c 可能会导致麻烦。

但是,您可以使用 pack pragma 强制关闭对齐。 (或您的编译器为其提供的任何其他选项)。

问题是为什么。如果您依赖它 - 您的程序可能无法在各种体系结构上移植和不可预测。

关于c++ - 利用否则浪费的填充空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836161/

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