内存中的数据对齐
2008-12-06 19:05
141 查看
数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。比如 dword的内存地址必须被4整除,word的内存地址必须被2整除。X86 cpu能直接访问对齐的数据,但它试图访问一组未对齐的数据时,它将对在内部进行一系列的对齐调整。这些调整对程序是透明的,但会影响运行速度,所以在编译过程中尽量保持数据对齐。同样的代码在VC,DEV C++中的编译结果。
int main()
{
int a;
char b;
int c;
printf("0x%08x",&a);
printf("0x%08x",&b);
printf("0x%08x",&c);
return 0;
}
VC:
0x0012ff7c
0x0012ff7b
0x0012ff80
变量在内存的存储顺序是:b(一字节)->a(四字节)->c(四字节)
DEV C++:
0x0022ff7c
0x0022ff7b
0x0022ff74
变量在内存的存储顺序是:c(4字节)中间相隔三字节->b(1字节)->a(4字节)
两个编译器都做到了数据对齐,但明显VC跟合理一些,节省内存。
int main()
{
int a;
char b;
int c;
printf("0x%08x",&a);
printf("0x%08x",&b);
printf("0x%08x",&c);
return 0;
}
VC:
0x0012ff7c
0x0012ff7b
0x0012ff80
变量在内存的存储顺序是:b(一字节)->a(四字节)->c(四字节)
DEV C++:
0x0022ff7c
0x0022ff7b
0x0022ff74
变量在内存的存储顺序是:c(4字节)中间相隔三字节->b(1字节)->a(4字节)
两个编译器都做到了数据对齐,但明显VC跟合理一些,节省内存。
相关文章推荐
- 不同内存对齐方式 memcpy之后数据错误
- 数据对齐---C语言:内存字节对齐详解
- C结构体中数据的内存对齐问题
- C结构体中数据的内存对齐问题
- C++学习笔记2--函数重载 复杂的数据 内存对齐 指针数组 结构与指针 传值传址传引用 联合枚举类型别名
- 内存数据对齐(翻:Data alignment:straighten up and fly right)
- 内存对齐(内存中的数据对齐)、大端模式及小端模式
- 内存中的数据对齐
- 内存对齐与ANSI C中struct型数据的内存布局(转载)
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- 内存对齐与ANSI C中struct型数据的内存布局
- 明明两个数据看的一样,但比较的结果就是不相等 (内存对齐,debug没问题,release 有问题)
- 内存中的数据对齐与sizeof函数
- 关于C语言中数据结构的内存对齐问题
- 内存对齐与ANSI C中struct型数据的内存布局
- 数据对齐/内存对齐 && 数据格式
- 内存中的数据对齐
- struct型数据的内存布局,struct的对齐方式
- VC中结构体内存分配问题透析(“字节对齐”访问数据)