pack详解

原创 2005年02月26日 18:33:00

#pragma pack(8)

struct S1{

    char a;

    long b;

};

struct S2 {

    char c;

    struct S1 d;

    long long e;

};

#pragma pack()

sizeof(S2)结果为24.

成员对齐有一个重要的条件,即每个成员分别对齐.即每个成员按自己的方式对齐.

也就是说上面虽然指定了按8字节对齐,但并不是所有的成员都是以8字节对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.

S1,成员a1字节默认按1字节对齐,指定对齐参数为8,这两个值中取1,a1字节对齐;成员b4个字节,默认是按4字节对齐,这时就按4字节对齐,所以sizeof(S1)应该为8;

S2,cS1中的a一样,1字节对齐,d 是个结构,它是8个字节,它按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的对齐参数中最大的一个,S1的就是4.所以,成员d就是按4字节对齐.成员e8个字节,它是默认按8字节对齐,和指定的一样,所以它对到8字节的边界上,这时,已经使用了12个字节了,所以又添加了4个字节的空,从第16个字节开始放置成员e.这时,长度为24,已经可以被8(成员e8字节对齐)整除.这样,一共使用了24个字节.

              a    b

S1的内存布局:11**,1111,

              c    S1.a S1.b     d

S2的内存布局:1***,11**,1111,****11111111

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

这里有三点很重要:

1.每个成员分别按自己的方式对齐,并能最小化长度

2.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度

3.对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐

STM8 TIM2 定时器的问题

定时50 ms  中断      所用的芯片为STM8S103F3P6,编译器为IAR  ,程序代码如下: // #include "iostm8s105c6.h" #include "iost...
  • chuckfql
  • chuckfql
  • 2014-01-17 19:20:51
  • 8819

IAR中使用struct强制对齐时的一个问题及解决

最近在用IAR开发MSP430程序过程中发现了一个问题,具体描述是这样的 首先定义了一个struct并强制1个字节对齐#pragma pack(push) //保存对齐状态 #pragma pack(...
  • xinyunyxq
  • xinyunyxq
  • 2014-02-14 15:46:29
  • 3530

php pack()函数详解与示例

转自:http://www.neatstudio.com/show-2327-1.shtml pack和unpack在一般的程序中还真的不容易见到,但是如果你用过很久以前的php生成exce...
  • qdujunjie
  • qdujunjie
  • 2014-11-07 11:36:12
  • 1028

#Pragma Pack(n)与内存分配

#pragma pack(n) 解释一: 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16...
  • xtzmm1215
  • xtzmm1215
  • 2015-03-30 09:08:15
  • 285

vs2008 设置

  • jphaoren
  • jphaoren
  • 2010-12-05 23:53:00
  • 3189

path and issue for angowx

d:\linux\linuxkernel\WORKING_DIRECTORY\android-omap-20111108-gingerbread\dalvik\libnativehelper\incl...
  • llrraa2010
  • llrraa2010
  • 2012-09-09 23:25:26
  • 9267

pack关键字的使用

pack         #pragma   pack([n])         该指令指定结构和联合成员的紧凑对齐。而一个完整的转换单元的结构和联合        的紧凑对齐由/Zp...
  • sherlockhua
  • sherlockhua
  • 2009-12-22 11:37:00
  • 669

PHP pack和unpack函数详解

pack 压缩资料到位字符串之中。 语法: string pack(string format, mixed [args]...); 返回值: 字符串 函数种类: 资料处理...
  • moqiang02
  • moqiang02
  • 2014-04-02 21:56:11
  • 4620

wpf pack uri理解

要理解wpf pack uri,首先要解释下应用程序数据文件,其实指的就是应用程序依赖的非可执行文件,例如xaml、图像、视频等。wpf支持对数据文件进行配置、识别及使用。在wpf中对数据文件分为三类...
  • xbgprogrammer
  • xbgprogrammer
  • 2015-03-24 23:09:47
  • 1852

关于hexdec()、pack()等函数的研究分析

http://chenwei.me/p/57.html 先看一段简单的代码 function Exec_Hex($data)  {   $len = strlen($data);   for($i=...
  • bytxl
  • bytxl
  • 2013-11-30 09:29:01
  • 703
收藏助手
不良信息举报
您举报文章:pack详解
举报原因:
原因补充:

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