gpt4 book ai didi

c - 结构填充和包装

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:57 24 4
gpt4 key购买 nike

考虑:

struct mystruct_A
{
char a;
int b;
char c;
} x;

struct mystruct_B
{
int b;
char a;
} y;

结构的大小分别为12和8。

这些结构是填充的还是打包的?

什么时候进行填充或打包?

最佳答案

填充 aligns “自然”地址边界的结构成员 - 例如,int 成员将具有偏移量,在 32 位平台上为 mod(4) == 0。默认情况下填充。它将以下“间隙”插入到您的第一个结构中:

struct mystruct_A {
char a;
char gap_0[3]; /* inserted by compiler: for alignment of b */
int b;
char c;
char gap_1[3]; /* -"-: for alignment of the whole struct in an array */
} x;

Packing,另一方面阻止编译器进行填充 - 这必须明确要求 - 在 GCC 下它是 __attribute__((__packed__)),所以如下:

struct __attribute__((__packed__)) mystruct_A {
char a;
int b;
char c;
};

将在 32 位架构上生成大小为 6 的结构。

但请注意 - 未对齐的内存访问在允许它的架构(如 x86 和 amd64)上较慢,并且在 严格对齐架构(如 SPARC)上被明确禁止。

关于c - 结构填充和包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47708208/

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