C/C++编译器的字节对齐方式

C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。

在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。

  1. 编译器缺省的结构成员自然对界条件为"N字节对齐",N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的"默认自然对界条件"上,则在前一个节面后面添加适当个数的空字节。
  2. 编译器缺省的结构整体自然对界条件为:该结构所有成员中要求的最大自然对界条件。若结构体各成员长度之和不为"结构整体自然对界条件的整数倍",则在最后一个成员后填充空字节。

例子:

c 复制代码
struct Test
{ 
  char x1; // 成员x1为char型(其起始地址必须1字节对界),其偏移地址为0
  char x2; // 成员x2为char型(其起始地址必须1字节对界,其偏移地址为1
  float x3; // 成员x3为float型(其起始地址必须4字节对界),编译器在x2和x3之间填充了两个空字节,其偏移地址为4
  char x4; // 成员x4为char型(其起始地址必须1字节对界),其偏移地址为8
};

在Test结构体中,最大的成员为float x3,因此结构体的自然对界条件为4字节对齐。则结构体长度就为12字节,内存布局为1100 1111 1000。

相关推荐
开源技术7 小时前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python
Cult Of7 小时前
Alicea Wind的个人网站开发日志(2)
开发语言·python·vue
我找到地球的支点啦7 小时前
通信扩展——扩频技术(超级详细,附带Matlab代码)
开发语言·matlab
liu****8 小时前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
微小冷8 小时前
Rust异步编程详解
开发语言·rust·async·await·异步编程·tokio
A9better8 小时前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
清水白石0088 小时前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python
杜子不疼.8 小时前
Ascend_C自定义算子开发
c语言·开发语言
小乔的编程内容分享站8 小时前
C语言笔记之函数
c语言·笔记
WooaiJava8 小时前
流式TTS音频播放项目 - 面试问答(后端)
java·开发语言