《一日二十四挨踢www.1024it.net》站文章在未特殊说明下默认为原创性文章。
在未有正式书面授权情况下,请勿转载。谢谢配合
什么也不说了,直接上一个实例。用实例说明,在一个结构体中,由于变量成员先后定义的位置不同,而导致结构体所占的内存大小不同。
究其原因,是由硬件引起的,如果是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$