gpt4 book ai didi

即使不需要,编译器也会应用结构填充

转载 作者:行者123 更新时间:2023-12-02 18:00:12 25 4
gpt4 key购买 nike

我试图了解结构填充在 C 中的工作原理。特别是在 Linux x86-64 环境中。为此,我重新排列了给定结构的成员的顺序,以查看在不需要时是否不会应用填充。但是,当我编译并运行打印每个结构的大小的代码时,即使第二个结构 (struct b) 的成员以连续的方式排列,填充也应用于它们两个。将它们存储在内存中不会导致其中之一占用多个字 block 。

#include <stdio.h>

struct a {
int ak;
char ac;
char* aptr;
};

struct b {
char* bptr;
int bk;
char bc;
};



int main(int argc, char* argv[]) {
printf("%lu\n", sizeof(struct a));
printf("%lu\n", sizeof(struct b));
}

输出:

16

16

最佳答案

struct b 的最大成员(或者更准确地说,具有最宽对齐要求的成员)具有 8 字节对齐,因此该结构的大小需要是 8 的倍数,以便该结构的数组将使其成员正确对齐。

因此,struct b 末尾将有 3 个字节的填充。

关于即使不需要,编译器也会应用结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74585376/

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