c/c++中内存布局问题

 《一日二十四挨踢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$  

 

 

你可能感兴趣的:(c/c++中内存布局问题)