为什么结构填充没有正常发生?
Why structure padding is not happening properly?
#include<stdio.h>
struct A
{
char c;
double e;
int s;
}A;
int main()
{
printf("%u\n", sizeof(A));
return 0;
}
它正在给出输出 16。把structure internal padding和structure padding作为一个整体来考虑,不应该是24吗?
我正在使用 GCC 4.8.2.
在 Ubuntu 14.04 32 位 上编译代码
您的计算假定 double
需要 8 字节对齐。并非所有架构都是如此。
在带有 GCC 的 32 位 x86 Linux 上,double
默认为 4 字节对齐。您可以使用 -malign-double
标志更改它以使其 8 字节对齐。
因此布局假定默认为 32 位 x86 Linux:
char // 1 byte
// 3 byte padding
double // 8 bytes
int // 4 bytes
所以一共16个字节,中间填充了3个字节
Wikipedia 文章 Data structure alignment 在 32 位 x86 和 64 位 x86_64 中有 size/alignment 个不同类型的数字 compilers/environments。
#include<stdio.h>
struct A
{
char c;
double e;
int s;
}A;
int main()
{
printf("%u\n", sizeof(A));
return 0;
}
它正在给出输出 16。把structure internal padding和structure padding作为一个整体来考虑,不应该是24吗?
我正在使用 GCC 4.8.2.
在 Ubuntu 14.04 32 位 上编译代码您的计算假定 double
需要 8 字节对齐。并非所有架构都是如此。
在带有 GCC 的 32 位 x86 Linux 上,double
默认为 4 字节对齐。您可以使用 -malign-double
标志更改它以使其 8 字节对齐。
因此布局假定默认为 32 位 x86 Linux:
char // 1 byte
// 3 byte padding
double // 8 bytes
int // 4 bytes
所以一共16个字节,中间填充了3个字节
Wikipedia 文章 Data structure alignment 在 32 位 x86 和 64 位 x86_64 中有 size/alignment 个不同类型的数字 compilers/environments。