c - 查找结构的大小

标签 c byte structure typedef sizeof

<分区>

给定以下机器,以下结构的大小 (sizeof(How_Many_Bytes)) 是多少 参数:

sizeof(char) == 1; sizeof(int) == 4; sizeof(long) == 8; sizeof(char *) == 8; 

整数值必须对齐。

typedef struct how_many_bytes { 
 long s; 
 char c, e; 
 int i; 
 char *d; 
} How_Many_Bytes; 

我原以为是 4+1+1+(2+4)+8 = 20 个字节,但当我在我的机器上运行时,我得到了 24 个字节。我想知道为什么?

最佳答案

从概念上讲,发生的事情是这样的:

typedef struct how_many_bytes { 
 long s;          // 8   (NOT 4!)
 char c, e;       // 2
 char pad1, pad2; // 2 note these
 int i;           // 4 
 char *d;         // 8
} How_Many_Bytes; // 24 total

有些类型有对齐要求。通常在 4 或 8 字节边界上。 所以编译器所做的就是让字段在这些边界上对齐 通过添加未命名的空字段。

关于c - 查找结构的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262111/

相关文章:

java - 如何在 Java 中屏蔽字节值?

c - sizeof(struct ExampleStruct) 或 sizeof( *VarExampleStruct) - 哪个是更好的编码实践?

c - 嵌套函数的主体保存在哪里?

c - 在 C89 中添加指向 size_t 的指针

java - 从文件中读取字节后,大多数是正确的,除了 1 是错误的和负的

c# - 每层的 MVVM 角色

dynamic - 物体间高效碰撞检测的最佳算法

c - 是在函数内部重新声明结构体还是将其声明为静态并每次都设置为 0 更好?

c - C 中的符号模拟 C++

python - 如何在Python中将16位无符号整数拆分为字节数组?