搜索
写经验 领红包
 > 自然

关于程序的内存的分布规则很多老程序猿都可以运行(程序在内存中的分布)

导语:关于程序的内存的分布规则,很多老程序猿都不知道

现在很多的高级语言真的是对程序猿十分的友好了,不用怎么去操心系统底层的问题,比如内存分配管理这些,只需要去考虑业务逻辑的实现就好了。但是想要成为一个顶尖高手,底层的一些知识是必须的。今天就给大家分享下关于我们写好的程序在运行时他的内存是怎么分配的

1、系统空间划分

每个程序运行起来以后,它将拥有自己独立的虚拟地址空间。这个虚拟地址空间的大小与操作系统的位数有关系。例如32位硬件平台的虚拟地址空间的地址可以从0~2^32-1,即0x00000000~0xFFFFFFFF,总共4GB大小。在32位Windows操作系统中,高地址的2GB位内核空间,用户空间只有2GB,而32位Linux的内核空间只有1GB,用户空间有3GB大小。而64位操作系统,用户可用空间则要大的多。

好,废话不多说直接上图:

那么每个区都存哪些数据呢?

代码区: 存储机器码序列/全局常量/代码/字符串常量全局区: 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 程序结束后由系统释放。未初始化数据段[.bbs]: 未初始化的全局变量/未初始化的(局部/全局)静态变量(static修饰的变量).堆(从低地址往高低至增长): 所使用的局部变量还是在栈上,内容则在堆上.手动释放或者程序结束时由操作系统释放回收。由程序员分配[new/malloc/realloc/calloc]。windows下, 申请的堆空间一般小于2GB。栈(从高地址往低地址增长): 局部变量/局部常量(const)[局部只读变量]/函数调用时返回地址/调用者的环境信息(例如某些机器寄存器)。

我们对应着代码来看更直观:

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小岑创作整理编辑!