struct对齐疑问
在看lua源码时,发现里面在定义object时用了union对齐技巧完成对object的强制对齐。
因此写了测试代码:
这里LUAI_USER_ALIGNMENT_T是8个字节,因为double最长;这里没有问题;
struct cc是16个字节;也没问题;
但是bb却是24个字节,这里不清楚。按理说,sizeof(cc) = sizeof(dummy)*2,那sizeof(bb)就应该是16个字节;而实际上是24个字节,求教
因此写了测试代码:
#define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; }
union aa{ double u;
void *s;
long l; };
struct cc{
double d;
int a;
unsigned int c;
};
struct bb{
LUAI_USER_ALIGNMENT_T dummy;
cc C;
};
int main(){
printf("%d %d\n", sizeof(cc), sizeof(bb));
} 这里LUAI_USER_ALIGNMENT_T是8个字节,因为double最长;这里没有问题;
struct cc是16个字节;也没问题;
但是bb却是24个字节,这里不清楚。按理说,sizeof(cc) = sizeof(dummy)*2,那sizeof(bb)就应该是16个字节;而实际上是24个字节,求教

...全文
相关推荐
深入剖析C++中的struct结构体字节对齐
要求数据内存的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,本文就来深入剖析C++中的struct结构体字节对齐,需要的朋友可以参考下
解析C语言中结构体struct的对齐问题
首先看一下结构体对齐的三个概念值: 数据类型的默认对齐值(自身对齐): 1.基本数据类型:为指定平台上基本类型的长度。如在32位机器中,char对齐值为1,short为2,int,float为4,double为8; 结构体:其数据成员中默认对齐值最大的那个值。 2.指定对齐值:#pragma pack (value)时的指定对齐值value。 3.数据类型的有效对齐值:默认对齐值和指定对齐值中小的那个值。 有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式。有效对齐值N是最终用来决定数据存放地址方式的值,最重要。有效对齐N,就是表示“对齐在N上”,也就是说该数据的“偏移
c/c++中struct定义、声明、对齐方式解析
通过C/C++的两种声明方式开始,给大家详细分析了/c+中struct定义、声明、对齐方式,对此有兴趣的朋友可以参考学习下。
C语言之struct大小、首地址与内存对齐[借鉴].pdf
C语言之struct大小、首地址与内存对齐[借鉴].pdf
C结构体对齐详解(结构体成员对齐)
结构体数据成员指针对齐,通过指针偏移给数据成员赋值。


