您的位置:首页 > 编程语言 > C语言/C++

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。

 

        程序源码:

#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$  

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: