这个问题确实比较基础,些这篇文章为了给自己一个总结,也算是一个笔记记录,争取做到最精简。结构体对齐关键词: “对齐系数”(也叫对齐模数):以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数 “对齐规则”:分两步,数据成员对齐,整体对齐: 1:数据...
分类:
其他好文 时间:
2014-07-07 18:42:00
阅读次数:
206
转:http://blog.csdn.net/embeddedman/article/details/7429976首先由一个程序引入话题:1//环境:vc6+windowssp22//程序13#include45usingnamespacestd;67structst18{9chara;10int...
分类:
编程语言 时间:
2014-07-02 23:40:51
阅读次数:
345
结构体的内存布局记住两个规则即可,这是编译器的优化措施。
规则1:结构体中第一个成员的偏移量是0,以后每个成员的位置是x的倍数;
x = min(#pragma pack(), 该成员自身的长度)
规则2:成员对齐后,结构体自身也要对齐,按照y的倍数进行;
y = min(#pragma pack(), 最大成员尺寸)。
其中#pragma pa...
分类:
其他好文 时间:
2014-06-22 19:35:35
阅读次数:
171
虽然内存对齐是老话题,但还是时常犯错,几下个例子,谨记: 1 void func10() 2 { 3 //要牢记,默认按4字节对齐,其他就很容易想了=============================== 4 union u_my 5 { 6 int n...
分类:
其他好文 时间:
2014-06-21 17:33:45
阅读次数:
198
在《C陷阱与缺陷》有这样一个例子: 1 #include 2 int 3 main(void)
4 { 5 int i; 6 char c; 7 for(i=0;i<5;i++){ 8 scanf("%d...
分类:
编程语言 时间:
2014-06-16 06:02:54
阅读次数:
377
内存对齐,memory
alignment.为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。内存对齐一般讲就是cpu
access memory的效率(提高运行速度)和准确性(在一些条...
分类:
其他好文 时间:
2014-06-12 19:25:28
阅读次数:
305
1 -- 结构体数据成员对齐的意义
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的时候都从某个8倍数的地址开...
分类:
其他好文 时间:
2014-06-11 00:41:01
阅读次数:
272
一、什么是对齐,以及为什么要对齐:1.
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。2.
对齐的作...
分类:
编程语言 时间:
2014-05-19 16:27:46
阅读次数:
376
#2.bool类型和const类型bool类型const限定符const与#define结构体内存对齐bool类型逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节。声明方式:boolresult;result=true;可以当作整数用(true一般为1,fa..
分类:
其他好文 时间:
2014-05-06 16:25:36
阅读次数:
331