内存对齐

原创 2013年07月15日 11:32:57

每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”,并且只能是2的幂。

对齐规则如下:

1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照 #pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。

2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

3、结合1、2推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。

4.各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。

5.各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节自动填充。

6.同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。

参考:http://developer.51cto.com/art/201002/183652.htm

             http://www.ibm.com/developerworks/library/pa-dalign/

C语言深度解剖读书笔记(3.结构体中内存对齐问题)

很多人都觉得内存对齐这个问题很难,很不好算,总算错,其实我想说只要你画一画就没那么难了。好了,进入正题。 本节知识点: 1.结构体为什么要内存对齐(也叫字节对齐): 其实我们都知道,结构体只是一...
  • qq418674358
  • qq418674358
  • 2013年08月24日 00:28
  • 6353

五分钟搞定内存对齐。

写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧.   /*******************...
  • me4weizhen
  • me4weizhen
  • 2016年09月19日 23:53
  • 1030

C/C++ 内存对齐原则及作用

struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成...
  • chy19911123
  • chy19911123
  • 2015年10月04日 09:50
  • 4214

内存对齐以及如何关闭内存对齐

内存对齐以前接触过,知道有这么回事,昨天面试,面试官问了一个结构体内存分配相关的问题: struct _A{ int a; int b; char c; }A; sizeof(A)=?(32位机器) ...
  • a1205137569
  • a1205137569
  • 2015年10月08日 09:28
  • 403

为什么要内存对齐

当我们听到”内存对齐“这个概念时,从字面意思来看,很容易理解。那就是让内存对齐。        当然  就会有人说  你这不是废话 ??         现在我就来说一说为什么要内存对齐以及怎么个对齐...
  • l_tudou
  • l_tudou
  • 2016年07月22日 23:40
  • 748

内存对齐与内存分配原则

首先讲一个概念—-内存对齐一种提高内存访问速度的策略,cpu在访问未对其的内存需要经过两次内存访问,而经过内存对齐一次就可以了。(?)打个比方就是:操作系统在访问内存时,每次读取一定的长度(这个长度是...
  • tingyun_say
  • tingyun_say
  • 2016年05月18日 14:30
  • 2295

对内存对齐的深一步理解

接触内存对齐这个概念,也有三四年了。不过由于我工作后一直做游戏服务器,都是在x86架构的机子上写代码,也没怎么注意内存对齐。使用最多的估计也就是面试时经常问结构体大小。最近在写自己服务器框架的二进流读...
  • weiyuefei
  • weiyuefei
  • 2016年08月05日 14:17
  • 1666

C 深度剖析内存对齐

首先说明一下,本文是转载自: http://www.cnblogs.com/clover-toeic/p/3853132.html 引言      考虑下面的结构体定义: typedef ...
  • guoke312
  • guoke312
  • 2016年12月21日 10:38
  • 517

gcc的内存对齐

原文在这里:http://blog.chinaunix.net/uid-7319742-id-2059621.html CPU以字节为单位编址,而C语言指针以指向的数据类型长度作自增和自减。 ...
  • ylluo_hust
  • ylluo_hust
  • 2014年03月16日 18:21
  • 632

内存对齐例子

具体的理论内容 神马是内存对齐以及为何要内存对齐请看http://blog.csdn.net/kokodudu/article/details/11918219 上面这个连接 将的相当理论 我给...
  • u010566813
  • u010566813
  • 2015年09月17日 01:00
  • 292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内存对齐
举报原因:
原因补充:

(最多只允许输入30个字)