Sur*_*ati 4 c struct sizeof padding
我有以下代码片段。
#include<stdio.h>
int main(){
typedef struct{
int a;
int b;
int c;
char ch1;
int d;
} str;
printf("Size: %d \n",sizeof(str));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下
Size: 20
Run Code Online (Sandbox Code Playgroud)
我知道 的大小structure
大于 的组件大小的总和,structure
因为添加了填充以满足内存对齐约束。我想知道如何决定必须添加多少字节的填充。它取决于什么?它取决于 CPU 架构吗?它也取决于编译器吗?我在这里使用 64 位 CPU 和gcc
编译器。如果这些参数发生变化,输出将如何变化。
我知道 StackOverflow 上也有类似的问题,但他们没有彻底解释这种内存对齐约束。
它通常取决于体系结构的要求。还有的货物在这里,但它可以总结如下:
x86 或 ARM 处理器上基本 C 数据类型的存储通常不会从内存中的任意字节地址开始。相反,除了 char 之外的每种类型都有对齐要求;chars 可以从任何字节地址开始,但 2 字节 short 必须从偶地址开始,4 字节 int 或浮点必须从可被 4 整除的地址开始,8 字节 long 或 double 必须从可被 8 整除的地址开始. 签名或未签名没有区别。
在您的情况下,可能会发生以下情况: sizeof(str) = 4 (4 bytes for int) + 4 (4 bytes for int) + 1 ( 1 byte for char) + 7 (3 bytes padding + 4 bytes for int) = 20
填充在那里,因此它int
位于 4 个字节的倍数的地址处。此要求来自int
4 个字节长的事实(我对您使用的架构的假设)。但这会因一种架构而异。
归档时间: |
|
查看次数: |
740 次 |
最近记录: |