据我所知,默认情况下会进行4字节对齐。例如:
typedef struct
{
int data7;
unsigned char data8;
//3 -bytes will be added here.
}Sample1;
所以sizeof(Sample1)
将为8。
但对于以下结构,为什么没有发生填充?
typedef struct
{
unsigned char data1;
unsigned char data2;
unsigned char data3;
unsigned char data4;
unsigned char data5;
unsigned char data6;
}Sample2;
但是Sample2的大小只有6。这个Sample2不是一个4字节对齐的结构吗?编辑:
根据维基百科
数据对齐意味着将数据放置在内存偏移量上,该偏移量等于字长(word size)的某个倍数,由于CPU处理内存的方式,这可以提高系统的性能。
但是Sample2的成员不会以两个为倍数进行对齐,是吗?
谢谢。
mod 4!= 0
处的char
没有性能惩罚。但是,如果您尝试使用mod 4!= 0
访问4字节的int
,则会出现性能问题,因为它跨越了4字节对齐边界。 - Mysticial