程序虚拟地址布局
来源:互联网 发布:菜鸟网络马云股份 编辑:程序博客网 时间:2024/05/19 00:53
程序虚拟地址布局:
从高到低:
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,而且栈空间是从高位到低位分配使用,
所以如果测试下面代码:
view plaincopy to clipboardprint?
int _tmain(int argc, _TCHAR* argv[])
{
int x;
int y;
int z;
cout << &x << endl;
cout << &y << endl;
cout << &z << endl;
getchar();
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int x;
int y;
int z;
cout << &x << endl;
cout << &y << endl;
cout << &z << endl;
getchar();
return 0;
}
其打印结果是:
0012,FF74
0012,FF78
0012,FF70
而且每次保持不变
而堆空间则从低往高分配,其中new最终调用 HeapAlloc(_crtheap, 0, size ? size : 1); 实现分配
在debug模式下 _crtheap = 0x003e,0000,也就是堆空间从 0X003E,0000 - 0X7FFE,0000
当然在堆空间中会有dll的加载,线程的栈空间等等,堆分配时会跳过这些被使用的空间
当创建一个线程时,其线程的栈空间其实也是通过HeapAlloc开在堆上的,所以线程的栈空间地址不固定。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hongjiqin/archive/2009/09/07/4528071.aspx
- 程序虚拟地址布局
- 程序地址布局
- 程序中使用虚拟地址的好处
- 虚拟地址
- 虚拟地址
- 程序的创建于虚拟地址的关系
- 进程虚拟地址空间中的虚拟内存区域(vma)---可执行程序与虚拟地址空间的映射关系
- GDB调试(调试的本质)??栈、堆,虚拟地址布局
- Linux高级编程之Linux程序地址布局
- Linux应用编程- 程序地址布局 动态库 静态库
- 虚拟地址 线性地址 物理地址
- 虚拟地址/逻辑地址 ----收藏
- 虚拟地址和地址保护
- 逻辑地址、虚拟地址、物理地址
- List虚拟布局
- 虚拟地址--物理地址
- 物理地址和虚拟地址
- 什么是虚拟IP地址
- Oracle 数据库后台进程的功能细化解析
- Android jogball 驱动分析
- javaScript自学总结-document.all
- 关于3Q大战的感想:得民心者得天下
- 关于努力,心里等问题
- 程序虚拟地址布局
- flex LineChart 图表动态增删Y轴实现。实现了动态增加但是Y轴删不干净
- JSP中include指令和include行为的区别
- 鼠标中键按下拖动滚动条(平移视图)
- Tomcat部署web应用的几种方法
- 拯救你的字符串:微有瑕疵的终极救赎
- PDM中BOM管理技术的研究及其应用
- MFC 子对话框向父对话框传递数据
- php获取客户端ip总结