当前位置: 技术问答>linux和unix
unix下内存边界对齐问题!
来源: 互联网 发布时间:2015-08-10
本文导语: 有一段程序,在非内存边界上存取内存,比如说内存以四字节对齐,而我在两字节的地方 开始写入四字节,这时会不会报错,如果报错是因为边界对齐问题,那怎么设置编译器选 项,让他以一字节对齐,忽略掉内存...
有一段程序,在非内存边界上存取内存,比如说内存以四字节对齐,而我在两字节的地方
开始写入四字节,这时会不会报错,如果报错是因为边界对齐问题,那怎么设置编译器选
项,让他以一字节对齐,忽略掉内存边界的检查?
我在程序中加入了
#pragma pack(1),可是没什么用!
请高手帮忙!
多谢!
开始写入四字节,这时会不会报错,如果报错是因为边界对齐问题,那怎么设置编译器选
项,让他以一字节对齐,忽略掉内存边界的检查?
我在程序中加入了
#pragma pack(1),可是没什么用!
请高手帮忙!
多谢!
|
用-D_KERNEL.举例
gcc -D_KERNEL example.c -o example
#include
#pragma pack(1)
typedef struct
{
unsigned short a;
unsigned int b ;
}pack;
main()
{
pack p;
printf("pack = %dn",sizeof(p));
}
//pack = 6
gcc -D_KERNEL example.c -o example
#include
#pragma pack(1)
typedef struct
{
unsigned short a;
unsigned int b ;
}pack;
main()
{
pack p;
printf("pack = %dn",sizeof(p));
}
//pack = 6
|
可以用__attribute__ ((packed));取消结构在编译时的对齐优化