内存布局

来源:互联网 发布:知乎注册必须手机号 编辑:程序博客网 时间:2024/04/29 11:18

1. 系统内存管理

32位操作系统,连续寻址的范围是2^32bit=4G的空间。对这4G的空间, win32划分如下:
dos区(win98),私有区, 共享区, 系统区。 0 ~ 4MB 为dos区, 4MB ~ 2GB为私有区,即win32应用

程序运行的空间, 2GB ~ 3GB 为共享区被应用所有程序共享, 包括user32.dll,

kernel32.dll,gdi32.dll。 3GB~4GB为虚拟机区, 包括硬件抽象等等。

2. 应用程序管理(c++)

应用程序即进程最大可用的内存为私有区的2GB(-4MB)空间。 应用程序在自己的私有的0~2GB(期望能寻址2GB)开发, 运行时做物理上的映射。

2GB的空间 划分为是基栈, 浮动栈, 堆。基栈也叫静态存储区,这部分包括代码本身,静态

变量, 全局变量, 常量等。 程序编译后大小确定, 并位于内存的底部0~XM。 浮动栈, 即栈, 函数调用的局部变量在此上分配, 位于基栈以上向上发展,函数调用开始局部变量压栈, 函数结束局部变量弹出。 多线程应用程序除了主线程栈, 每个线程多拥有一个线程栈

(win32 默认线程栈大小为1M)。 堆, 位于顶部2GB向下寻址。

 

const int c=0;
void Example(int t,const string &str)
{
   int i=0;

   int *p = new int(0);
}

变量c位于基栈 ,
参数t值传递, 产生临时变量,压入浮动栈内。
如果传入的是 char*, 那么编译器产生临时变量,压入浮动栈内。
变量i位于浮动栈。
变量p位于浮动栈。
变量p指向的物位于堆。

 

原创粉丝点击