首页 > 其他分享 >C语言结构体对齐

C语言结构体对齐

时间:2022-11-28 21:23:47浏览次数:49  
标签:min 成员 指定 C语言 自身 对齐 结构

结构对齐规则

  1. 结构体(struct)的数据成员,第一个数据成员存放的地址为结构体变量偏移量(offset)为0的地址处。
  2. 结构体成员自身对齐时,存放的地址为有效对齐值 = min{自身对齐值, 或指定对齐值} 的最小整数倍的地址处.
  3. 结构体总体对齐时有效对齐值 = min{结构体最大成员自身对齐值, 或指定对齐值} 最终大小为有效对齐值的整数倍。

注:

  1. 自身对齐值:结构体变量里每个成员的自身大小
  2. min{A, B} 含义为: 求取 A, B 谁最小。
  3. = 表示赋值
  4. 指定对齐值:有宏 #pragma pack(N) 指定的值,这里面的 N一定是2的幂次方.如1,2,4,8,16
  5. 有效对齐值:结构体成员自身对齐时有效对齐值为自身对齐值与指定对齐值中 较小的一个
  6. 如果结构体最大成员数据类型为复合类型, 对齐值则为该结构体最大成员的最大子成员自身对齐值(如果是数组则已元素自身对齐值作为标准)

标签:min,成员,指定,C语言,自身,对齐,结构
From: https://www.cnblogs.com/yangcyan-blog/p/16933646.html

相关文章

  • C语言——操作符
    1.算术操作符: + - * / % 注意:%前后两个数都要是整形2.移位操作符: >>右移操作符。{2.1算术右移:右边丢弃,左边补符号位。2.2逻辑右移:右边丢弃,左边补0.}<<左移操作......
  • go源码学习(一):数据结构-数组
    数组是相同类型元素的集合,在内存中对应一块连续的内存空间。数组类型是通过存储的元素类型以及能够存储的大小两个维度来决定的,一旦声明之后大小就不可更改。初始化go语......
  • 【C语言】“HelloWorld” 程序
    C语言入门:“HelloWorld”程序:代码如下:#include<stdio.h>//用#include指令包含标准输入输出头文件:stdio.h。intmain(void)//main()函数是C程序的入口,在一个......
  • 【C语言】实现两个整数相加
    用C语言实现两个整数相加1.首先出于目的我们需要输入两个整数和输出两个整数相加的值,需要用到printf()函数所以需要引头文件stdio.h#include<stdio.h>2.声明两个整形......
  • 代码对齐(Alignment of Code)
    AlignmentofCodeTimeLimit:4000/2000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):958    AcceptedSubmission(s......
  • 【779】R语言数据结构
    1.向量向量从数据结构上看就是一个线性表,可以看成一个数组。c()是一个创造向量的函数。R语言中的"下标"不代表偏移量,而代表第几个,也就是说是从1开始的!seq......
  • Java实现递归查询树结构
        我们在实际开发中,肯定会用到树结构,如部门树、菜单树等等。Java后台利用递归思路进行构建树形结构数据,返回给前端,能以下拉菜单等形式进行展示。今天,咱们就来说......
  • C语言中static
    static表示全局或静态意思;在函数体内,静态变量具有记忆功能,即在函数被调用过程中,一个被声明为静态变量的值维持不变;在模块内,但在函数体外,作用域范围是有限制的,static类型的......
  • 常见8大数据结构
    8种数据结构,数组、链表、栈、队列、树、堆、图、哈希表。①、数组优点:按照索引查询元素的速度很快;按照索引遍历数组也很方便。缺点:数组的大小在创建后就确定......
  • (GCC) GCC 结构体内存对齐规则
    GCCstruct内存对齐规则结构体起始地址需要被其中成员类型最大的大小所整除;每个成员起始地址需要被其类型大小所整除,如int32_t类型成员内存对齐到4B;如果成员有子结构......