在回答之前,我想给你一些维基的数据

数据结构对齐是在计算机存储器中布置和访问数据的方式。它包括两个独立但相关的问题:数据对齐和数据结构填充。

当现代计算机从存储器地址读取或向存储器地址写入时,它将以字大小的块(例如,32位系统上的4字节块)进行。数据对齐意味着将数据置于等于字大小的某个倍数的存储器偏移量,这由于CPU处理存储器的方式而增加了系统的性能。

为了对齐数据,可能需要在最后一个数据结构的结尾和下一个数据结构的开始之间插入一些无意义的字节,这是数据结构填充。

gcc提供了避免结构填充的功能。即在某些情况下避免这个无意义的字节。考虑以下结构

typedef struct

{

char Data1;

int Data2;

unsigned short Data3;

char Data4;

}sSampleStruct;

sizeof(sSampleStruct)将是12而不是8.因为结构填充。默认情况下,在X86中,结构将被填充为4字节对齐。

typedef struct

{

char Data1;

//3-Bytes Added here.

int Data2;

unsigned short Data3;

char Data4;

//1-byte Added here.

}sSampleStruct;

我们可以使用__attribute __((packed,aligned(X)))来坚持特定的(X)大小的填充。 X应该是二的幂。参见here

typedef struct

{

char Data1;

int Data2;

unsigned short Data3;

char Data4;

}__attribute__((packed, aligned(1))) sSampleStruct;

所以上面指定的gcc属性不允许结构填充。所以大小将是8字节。

如果你想对所有的结构做同样的事情,只需要使用#pragma将对齐值压入堆栈即可

#pragma pack(push, 1)

//Structure 1

......

//Structure 2

......

#pragma pack(pop)

c语言 aligned,“__attribute __((packed,aligned(4)))”的含义是什么意思?相关推荐

  1. c语言转义字符_C语言啊中的转义符有什么含义?

    其实所谓的换行符就是回车,在各类编程语言中换行符是很常见的,而转义字符是一种特殊的字符常量.转义字符以反斜线""开头,后跟一个或几个字符. 转义字符具有特定的含义,不同于字符原有的 ...

  2. LaTeX 使用 \begin{aligned} 出现错误代码 Environment aligned undefined. \begin{aligned}

    问题: LaTeX 使用\begin{aligned},出现错误代码: Environment aligned undefined. \begin{aligned} 答案: 在导言区的加入\usepa ...

  3. C语言基础——C语言概述——语句和每行代码的含义

    目录 2.1:C 语言的六种语句 2.2:C程序中每行代码的解释 2.1:C 语言的六种语句 标号语句 复合语句 表达式语句 选择语句 迭代语句 跳转语句 我们先来看一个简单的C程序 2.2:C程序中 ...

  4. Python语言常用的49个基本概念及含义

    好消息:"Python小屋"编程比赛正式开始 推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: ...

  5. C语言格式控制字符的含义,(C语言)ASCII码前32个控制字符的含义?

    满意答案 空字符 0000 0001 1 01 SOH (start of handing) 标题开始 0000 0010 2 02 STX (start of text) 正文开始 0000 001 ...

  6. 【GCC】gcc警告选项汇总--编辑中|gcc编译选项

    目录 前言 请求或取消警告选项 GCC编译选项 参考原文:https://blog.csdn.net/qq_17308321/article/details/79979514 前言 警告:不是错误的, ...

  7. Linux下__attribute__((aligned(n)))的使用

    关键字__attribute__允许你在定义struct.union.变量等类型时指定特殊属性.此关键字后面是跟着双括号括起来的属性说明.__attribute__不属于标准C语言,它是GCC对C语言 ...

  8. Latex aligned

    \begin{align} f_X(x)&=\int_0^1f(x,y)dy\nonumber\\ &=\int_0^1\frac{3(x^2+y)}{11}dy\nonumber\\ ...

  9. (转)C语言家族扩展

    (转)C语言家族扩展 翻译: 5.1--5.6 林峰 5.7--5.20 董溥 5.21--5.26 王聪 5.27--5.34 刘洋 5.35--5.43 贾孟树 致谢:感谢陈老师指出其中的一些错误 ...

最新文章

  1. Python3 函数function
  2. MySQL管理之日志详解
  3. Swift - 类型属性(类静态属性)和类方法(类静态方法)
  4. Codeforces 刷题记录(已停更)
  5. centos网络隔一段时间就断_计算机网络总结
  6. 感知器原理及线性分类技术实现
  7. 大数据“高烧不断”,“得数据者得天下”的关键在哪?
  8. 已重置默认应用设置html,win10已重置应用默认设置一直弹怎么办_win10已重置应用默认设置老是弹出解决方法...
  9. MySQL Membership
  10. java jdbc事务_Java JDBC事务管理和保存点
  11. php学习第一讲----php是什么?
  12. imageio.write页面怎么显示_微信吃喝玩乐怎么没有了?微信支付页面吃喝玩乐在哪里...
  13. linux tcp 压力测试工具,技术|分布式TCP压力测试工具 tcpcopy
  14. c语言在线编译答案,(完整版)C语言试题
  15. 从“西点军校法则”学管理
  16. Android 自动朗读(TTS)
  17. 4.23 使用数据条功能使数值更加直观 [原创Excel教程]
  18. 知道创宇爬虫题--代码持续更新中
  19. Java面试题之Redis的大坑
  20. 某银行大数据体系架构设计与演进

热门文章

  1. 统计学中三大相关系数
  2. 如何下载B站视频,解决视频没有声音/音画分离问题(IDM+Potplayer)
  3. 又双叒叕可以 4 折买书了!!来薅羊毛了!
  4. 清华大学公开课线性代数2——第12讲:复数与复矩阵
  5. C#中的转义字符和Verbatim字符串
  6. android 官方ui库,腾讯出品的一个超棒的 Android UI 库
  7. 程序员常用软件介绍--持续更新
  8. can转光纤 海上风电消防火灾报警系统中消防主机超远距离联网方案
  9. Cloud一分钟 |互联网之冬;华为停招,BAT裁员;苹果下线拼多多应用;意媒谈DG风波:中国人记性差...
  10. 怎么旋转PDF页面方向?可以只旋转一页吗