c - 为什么 __last__ 元素需要 c struct 填充

标签 c struct alignment padding

我知道填充,它的规则,为什么需要等等。

我的问题给出了结构,

struct my_struct {
   int a;
   char c;
};

在这种情况下,c 的起始地址是字对齐的,但编译器仍然添加了 3 个字节(假设字大小为 4)填充。 c 之后没有元素,为什么我们需要这 3 个字节? 我检查了以下内容,

int g_int1;
struct my_struct st;
int g_int2;

上面我的意思是我的其余变量声明不依赖于先前变量大小的单词对齐。编译器总是尝试对齐下一个变量,而不管其全局或局部自动变量。

我看不出有任何字节顺序的原因,因为这是 char,对于一个字节来说无关紧要。我认为是什么原因而不是检查最后一个元素条件编译器总是在需要时添加填充。

正当理由是什么?

最佳答案

因为如果 sizeof(my_struct) 是 5 而不是 8,那么如果你这样做:

my_struct array[2];

那么 array[0] 将是字对齐的,但 array[1] 不是。 (回想一下,数组查找是通过将 sizeof(array[0]) 的倍数添加到第一个元素的地址来完成的。)

关于c - 为什么 __last__ 元素需要 c struct 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14607006/

相关文章:

c - 从 C 中的函数返回结构体数组

html - 文本在 CSS 中与照片对齐

html - 如何在 flexbox 中居中放置内容

c - 如何有效地将多个参数与要在 C 中打印的字符串连接起来?

c - 我的凯撒密码版本有什么问题?参数组2

c - 无法将二进制转换为十进制

css - 对齐元素列表

c - strcmp 不会在 'identical' 字符串上返回 0

c - 递归结构

c - 如何在类型定义上将预定义值分配给结构成员?