结构体 对齐的问题
2009-01-08 15:33
323 查看
以前没注意过,今天遇到这个问题,举例如下:
环境vs2005,c++
typedef struct {
int iFileCode; //文件标识
double dbMMax;
} SHPHEADER1
//获得索引文件记录偏移量相对文件头
if (iRecord == 1 )
iOffset = sizeof(SHPHEADER1);
iOffset = 16,
如果在.h文件中加入#pragma pack(4) ,则iOffset =12,具体原因,看帖子
http://topic.csdn.net/t/20050321/13/3868040.html#
“成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.”
结构体A中有3个short类型变量,各自以2字节对齐,结构体对齐参数按默认的8字节对齐,则a1,a2,a3都取2字节对齐,则sizeof(A)为6,其也是2的整数倍;
B中a1为4字节对齐,a2为2字节对齐,结构体默认对齐参数为8,则a1取4字节对齐,a2取2字节对齐,结构体大小6字节,6不为4的整数倍,补空字节,增到8时,符合所有条件,则sizeof(B)为8;
环境vs2005,c++
typedef struct {
int iFileCode; //文件标识
double dbMMax;
} SHPHEADER1
//获得索引文件记录偏移量相对文件头
if (iRecord == 1 )
iOffset = sizeof(SHPHEADER1);
iOffset = 16,
如果在.h文件中加入#pragma pack(4) ,则iOffset =12,具体原因,看帖子
http://topic.csdn.net/t/20050321/13/3868040.html#
11 楼hofer_song(逯爻(虫))回复于 2005-03-21 14:52:27 得分 28
(引用)“成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.”
13 楼hofer_song(逯爻(虫))回复于 2005-03-21 15:07:05 得分 0
结构体A中有3个short类型变量,各自以2字节对齐,结构体对齐参数按默认的8字节对齐,则a1,a2,a3都取2字节对齐,则sizeof(A)为6,其也是2的整数倍;B中a1为4字节对齐,a2为2字节对齐,结构体默认对齐参数为8,则a1取4字节对齐,a2取2字节对齐,结构体大小6字节,6不为4的整数倍,补空字节,增到8时,符合所有条件,则sizeof(B)为8;
相关文章推荐
- 结构体内存对齐问题
- 结构体内存对齐问题
- 结构体的字节对齐问题
- 结构体struct的自然对齐问题(经典)
- 关于C语言中的结构体对齐问题
- 关于C语言结构体对齐问题的探讨
- c语言学习零碎整理(2):结构体对齐问题
- C语言中结构体对齐问题
- 结构体字节对齐问题
- STM32学习笔记10——stm32中结构体字节对齐问题
- 结构体字节对齐问题
- 再谈:自定义结构体的对齐问题之__attribute__ ((packed))方法【转】
- 32位和64位下结构体内存对齐问题
- C语言中结构体中变量存储的对齐问题
- C语言结构体对齐问题
- 关于字节对齐、结构体偏移地址、字位段问题的例子程序说明
- 彻底理解结构体对齐问题
- 关于结构体内存对齐的问题
- arm 结构体对齐问题
- 结构体中字节对齐的问题