内存布局

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指向的物位于堆。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值