4byte对齐内存分配方式下,下面4个定义的等效结构体,从存储效率上哪个更优

2025-03-11 01:02:50
推荐回答(1个)
回答1:

成员的大小的和不等于类的大小,主要是因为类内部有padding。额外的padding保证声明数组时,各个元素的对齐要求依然满足,而且还会满足cpu对于不同类型的对齐要求。x86一般可以存取没有对齐的数据,但是效率较低,有些cpu不能存取没有对齐的数据,会产生异常。


假定32bit系统,那么常见数据类型的对齐要求是


  1. char 1字节

  2. short 2字节

  3. int 4字节

  4. long 4字节

  5. float 4字节

  6. double 8字节(不一定,linux上似乎只要求4字节)。




之后看你的代码,各个成员的偏移为

  • index - 0

  • name - 4

  • age - 30

  • salary - 32




这里总的大小为40,理由是age不是从29开始,而是30,为了保证满足short的对齐要求。