如何计算结构中不同数据类型的偏移量?
How to count the offset of different data type in struct?
我知道不同的数据类型会对齐。但是我想不通为什么这个结构体的大小是12
#include <stdio.h>
struct ABC {
char a;
char b;
int k;
char c;
};
int main()
{
struct ABC a;
printf("%lu\n", sizeof(a)); //12
return 0;
}
好的,它是这样工作的
规则如下:
char
s 对齐到 1 个字节
int
s 对齐到 4 个字节
整个结构必须与最大元素的倍数对齐。
最终结构将是
struct ABC
{
char a; // Byte 0
char b; // Byte 1
char padding0[2]; // to align the int to 4 bytes
int k; // Byte 4
char c; // Byte 8
char padding1[3]; // align the structure to the multiple of largest element.
// largest element is int with 4 bytes, the closest multiple is 12, so pad 3 bytes more.
}
我知道不同的数据类型会对齐。但是我想不通为什么这个结构体的大小是12
#include <stdio.h>
struct ABC {
char a;
char b;
int k;
char c;
};
int main()
{
struct ABC a;
printf("%lu\n", sizeof(a)); //12
return 0;
}
好的,它是这样工作的
规则如下:
char
s 对齐到 1 个字节
int
s 对齐到 4 个字节
整个结构必须与最大元素的倍数对齐。
最终结构将是
struct ABC
{
char a; // Byte 0
char b; // Byte 1
char padding0[2]; // to align the int to 4 bytes
int k; // Byte 4
char c; // Byte 8
char padding1[3]; // align the structure to the multiple of largest element.
// largest element is int with 4 bytes, the closest multiple is 12, so pad 3 bytes more.
}