c/c++中内存布局问题
2013-04-24 22:56
295 查看
《一日二十四挨踢www.1024it.net》站文章在未特殊说明下默认为原创性文章。
在未有正式书面授权情况下,请勿转载。谢谢配合
什么也不说了,直接上一个实例。用实例说明,在一个结构体中,由于变量成员先后定义的位置不同,而导致结构体所占的内存大小不同。
究其原因,是由硬件引起的,如果是32 bits的机器,就会按照 4 Byte布局;如果是64 bits 的机器,就会按照8 Byte布局。同一个变量,不能跨越两个内存布局单元(前面所说的4Byte或8Byte)。还有值得提的一点是,在基本数据类型中,只有long和指针类型才会随着系统的位数变化,即,32 bit时,它们占4 Byte;64 bit时,它们占8 Byte。
程序源码:
编译的Makefile文件:
在32位的操作系统上编译,并在上面运行,结果为:
在64位的操作系统上编译,并在上面运行,结果为:
在64位的操作系统上加-m32编译,并在上面运行,结果为:
在64位的操作系统上加-m64编译,并在上面运行,结果为:
在未有正式书面授权情况下,请勿转载。谢谢配合
什么也不说了,直接上一个实例。用实例说明,在一个结构体中,由于变量成员先后定义的位置不同,而导致结构体所占的内存大小不同。
究其原因,是由硬件引起的,如果是32 bits的机器,就会按照 4 Byte布局;如果是64 bits 的机器,就会按照8 Byte布局。同一个变量,不能跨越两个内存布局单元(前面所说的4Byte或8Byte)。还有值得提的一点是,在基本数据类型中,只有long和指针类型才会随着系统的位数变化,即,32 bit时,它们占4 Byte;64 bit时,它们占8 Byte。
程序源码:
#include <iostream> using namespace std; struct s1{ char flag; short age; int money; char * name; long tmp; }; struct s2{ char flag; char * name; short age; long tmp; int money; }; int main(){ cout << "最小占据内存为:" << sizeof(s1) << endl; cout << "最大占据内存为:" << sizeof(s2) << endl; }
编译的Makefile文件:
SRC=struct.cpp APP=struct CC=g++ lina: $(CC) $(SRC) -o $(APP)
在32位的操作系统上编译,并在上面运行,结果为:
robin@ubuntu:~/workspace/c++_workspace$ ./struct 最小占据内存为:16 最大占据内存为:20 robin@ubuntu:~/workspace/c++_workspace$
在64位的操作系统上编译,并在上面运行,结果为:
robin@ubuntu:~/workspace/c++_workspace$ ./struct 最小占据内存为:24 最大占据内存为:40 robin@ubuntu:~/workspace/c++_workspace$
在64位的操作系统上加-m32编译,并在上面运行,结果为:
robin@ubuntu:~/workspace/c++_workspace$ ./struct 最小占据内存为:16 最大占据内存为:20 robin@ubuntu:~/workspace/c++_workspace$
在64位的操作系统上加-m64编译,并在上面运行,结果为:
robin@ubuntu:~/workspace/c++_workspace$ ./struct 最小占据内存为:24 最大占据内存为:40 robin@ubuntu:~/workspace/c++_workspace$
相关文章推荐
- C++技术问题总结-第1篇 内存布局
- 《C++中类对象的内存布局和占用空间》《C++ 类里面,函数占用存储空间问题 》
- 《coredump问题原理探究》Linux x86版6.1节C++风格数据结构内存布局之无成员变量的类
- 《C++中类对象的内存布局和占用空间》《C++ 类里面,函数占用存储空间问题 》
- C++内存布局--从一个修改私有变量的问题想到的
- [C++] struct 内存对齐问题
- 【转】C++对象内存分配问题
- 浅谈C/C++结构体内存分配问题
- [c/c++]class/struct数据在内存中的布局
- C++ 对象的内存布局(上)
- C++ 多继承和虚继承的内存布局
- c++虚继承对象的内存布局
- c++内存中字节对齐问题详解
- c++对内存的浅谈以及内存泄漏问题的探讨之十一(2)
- C/C++内存问题检查利器—Purify (五)
- C++内存布局生成步骤
- C++ 对象的内存布局(上)
- C++ 对象的内存布局(上)
- C++ 对象的内存布局(下)
- c++对象内存模型【内存布局】(转)