程序内存布局

程序虚拟地址布局:

从高到低:
0X8000,0000 - 0XFFFF,FFFF  内核空间
0X7FFF,0000 - 0X7FFF,FFFF   64K的禁止进入区
0X0001,0000 - 0X7FFE,FFFF  用户空间
0X0000,0000 - 0X0000,FFFF  NULL指针分配区(64K)

其中用户空间中,用户的exe程序一般加载到0X0040,0000(往高处加载),
而主线程(main/WinMain线程)的栈空间是 : 0X0003,0000 - 0X0013,0000,而且栈空间是从高位到低位分配使用,
所以如果测试下面代码:


其打印结果是:
0012,FF74
0012,FF78
0012,FF70
而且每次保持不变

而堆空间则从低往高分配,其中new最终调用 HeapAlloc(_crtheap, 0, size ? size : 1); 实现分配
在debug模式下 _crtheap = 0x003e,0000,也就是堆空间从 0X003E,0000 - 0X7FFE,0000
当然在堆空间中会有dll的加载,线程的栈空间等等,堆分配时会跳过这些被使用的空间

当创建一个线程时,其线程的栈空间其实也是通过HeapAlloc开在堆上的,所以线程的栈空间地址不固定。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值