摘要: 通过上面的分析,总结结构体对齐规则如下: 1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。2、结构(或联合)的整体对齐规则: 阅读全文
posted @ 2017-02-13 17:25 3me 阅读(1744) 评论(0) 推荐(0) 编辑
摘要: 原文链接:http://www.catb.org/esr/structure-packing/ 谁应阅读本文 本文探讨如何通过手工重新打包C结构体声明,来减小内存空间占用。你需要掌握基本的C语言知识,以理解本文所讲述的内容。 如果你在内存容量受限的嵌入式系统中写程序,或者编写操作系统内核代码,就有必 阅读全文
posted @ 2017-02-13 14:27 3me 阅读(1093) 评论(0) 推荐(0) 编辑
摘要: GCC支持用__attribute__为变量、类型、函数、标签指定特殊属性。这些不是编程语言标准里的内容,而属于编译器对语言的扩展。 本文介绍其中的两个属性:aligned和packed。 aligned aligned属性最常用在变量声明上。它的作用是告诉GCC,为变量分配内存时,要分配在对齐的内 阅读全文
posted @ 2017-02-13 14:24 3me 阅读(2198) 评论(0) 推荐(0) 编辑
摘要: gcc 支持 aligned 和 packed 属性指定数据对齐,那么在了解对齐规则之前,需要解决第一个以为,我们为什么需要数据对齐?请看下图: 相信学过汇编的朋友都很熟悉这张图,这张图就是CPU与内存如何进行数据交换的模型,其中,左边蓝色的方框是CPU,右边绿色的方框是内存,内存上面的0~3是内存 阅读全文
posted @ 2017-02-13 14:19 3me 阅读(833) 评论(0) 推荐(0) 编辑