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

C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。
在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。

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

例子:

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。
在这里插入图片描述

相关推荐

  1. css对齐方式

    2024-01-19 13:36:05       63 阅读
  2. 遭遇字节对齐导致错误一例

    2024-01-19 13:36:05       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 13:36:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 13:36:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 13:36:05       87 阅读
  4. Python语言-面向对象

    2024-01-19 13:36:05       96 阅读

热门阅读

  1. el-table点击每一行加背景颜色

    2024-01-19 13:36:05       64 阅读
  2. 第11章 jQuery

    2024-01-19 13:36:05       48 阅读
  3. protobuf

    protobuf

    2024-01-19 13:36:05      55 阅读
  4. React16源码: React中的beginWork的源码实现

    2024-01-19 13:36:05       44 阅读
  5. MySQL运维实战(4.5) SQL_MODE之NO_ZERO_DATE和NO_ZERO_IN_DATE

    2024-01-19 13:36:05       53 阅读