#include<stdio.h>
struct A
{
char c;
double e;
int s;
}A;
int main()
{
printf("%u\n", sizeof(A));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给出了输出16.如果我们考虑结构内部填充和结构填充作为一个整体,它不应该是24?
我正在使用GCC 4.8.2在Ubuntu 14.04 32位上编译代码.
Mat*_*Mat 12
您的计算假设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
Run Code Online (Sandbox Code Playgroud)
所以总共16个字节,中间有3个字节的填充.
维基百科文章数据结构对齐在一些编译器/环境中具有32位x86和64位x86_64上的各种类型的大小/对齐数.