一、结构体对齐

首先通过一个例子说明结构体对齐,可以看到,下面这个结构体占32字节(32位)

typedef struct {double d;short s;int i;char c;short ss;char cc;int ii;
} A;

这个是8字节默认对齐。

二、#pragma pack

可以使用 #pragma pack(push, 4) 将对齐数改成4,那么结构体大小就会变成28字节。

#pragma pack(push, 4)
typedef struct {double d;short s;int i;char c;short ss;char cc;int ii;
} A;
#pragma pack(pop)

对齐从8改成了4,虽然成员没变,但是大小变成了28. #pragma pack(push, 4) 和 #pragma pack(pop) 是设置和恢复对齐。#pragma pack(show) 可以在警告输出栏打印当前对齐数。

最后请读者算一下对齐为16会怎样?

#include <stdio.h>#pragma pack(push, 16)
typedef struct {double d;short s;int i;char c;short ss;char cc;int ii;
} A;
#pragma pack(pop)int main()
{printf("%d\n", sizeof(A));return 0;
}

分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线

答案就是32

结构体对齐,#pragma pack相关推荐

  1. 结构体------对齐与压缩(#pragma, __packed)

    结构体对齐 摘自原则: 结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的.从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的 ...

  2. 这个结构体对齐输出有意思

    这个题目是我在群里看到大家讨论的,既然是讨论的了,那我就拿出来说说,因为笔试面试的时候,可能就会遇到这样的题目. 实例代码 #include "stdio.h" #include ...

  3. C语言结构体对齐[转]

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  4. linux windows 结构体,Linux下C语言——结构体对齐

    结构体对齐的步骤: 1.结构体各成员对齐 2.整个结构体圆整 结构体对齐的特定对齐值: 1.自身对齐值: 自身对齐值就是结构体变量里每个成员的自身大小; 2.指定对齐值: 指定对齐值是由宏#pragm ...

  5. 结构体对齐(字节对齐)规则及大小计算

    什么是字节对齐 这跟读取数据有关,cpu读取一次能读取到的内存大小跟数据总线的位数有关,如果数据总线为16位,那么cpu一次能够读取2字节:如果为32位那么cpu一次可以读取4字节,而读取数据是需要消 ...

  6. C语言结构体对齐详解

    文章目录 一.C语言结构体对齐大小快速判断 二.反汇编角度看结构体 三.总结 一.C语言结构体对齐大小快速判断 在C语言中定义一个结构体,里面具体占用多少个字节呢,先举一个例子,如下: #includ ...

  7. 结构体(对齐规则及举例)

    结构体(对齐规则及举例) 文章目录 结构体(对齐规则及举例) 概念 结构体声明 结构体对齐规则 对齐原因 对齐规则 举例说明对齐原则 C++中的结构体struct------类 class和struc ...

  8. C语言之结构体以及结构体对齐访问

    1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同. 2:结构体的定义: struct stude ...

  9. C语言结构体对齐的不足

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105065657 C ...

最新文章

  1. MySQL主从复制延迟的监测及缓解
  2. linux 查看软连接_linux删除原理
  3. MySQL中函数CONCAT及GROUP_CONCAT
  4. leetcode算法题--数字序列中某一位的数字
  5. nginx核心模块常用指令
  6. 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...
  7. BestCoder Round #87 1003 LCIS[序列DP]
  8. CSS 块格式化上下文 BFC
  9. 说说 Python TestCase 中的断言方法
  10. html中使用style设置背景
  11. 用VB 代码读取 Excel 内容
  12. MES系统软件体系架构
  13. 中国企业管理水平啥时候才能成熟啊
  14. 解决 adb no permissions (user mi is not in the plugdev group);
  15. 数据系统服务器更新是什么,更新客户端数据,除了轮询请求服务端,还有什么解决方案?...
  16. 关于Python入门的常用工具Wing你了解多少
  17. rebase详解——非常精髓
  18. python 布莱克舒尔斯_布莱克—舒尔斯期权定价模型
  19. jQuery实现简单分页
  20. 2188 完成比赛的最少时间(递推)

热门文章

  1. php中如何写js代码提示_PHP 如何编写类似js中alert() 提示框
  2. DayDayUp:大学英语六级考试简介、应试分析、题型内容((Writing/Listening/Reading/Translation)、解答经验步骤、解题技巧之最强攻略(建议收藏)
  3. 成功解决 raise RuntimeError(“The JPMML-SkLearn conversion application has failed. The Java executable
  4. 微信小程序背景图虚化
  5. 微信小程序——添加按钮格式
  6. MQ各个元素的详细理解
  7. 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
  8. mybatis入门(六)----高级映射(一对一,一对多,多对多)
  9. 408. Valid Word Abbreviation有效的单词缩写
  10. libpcap抓取数据包