一般说到内存指的是计算机的随机存储器(RAM),程序都是在这里面运行。
计算机内存的大致划分如下:
1:内存地址由上倒下依次增加
2:内存由上倒下依次分为以下几块:
内核虚拟内存:用户代码不可见的内存,地址空间顶部的区域,是为内核保留的。
栈: 维护虚拟地址的空间顶部是用户栈,编译器用它来实现函数调用。
每次调用一个函数时栈会增长(方法中涉及大量的几部变量),
从函数返回时栈会收缩。
存储运行时的局部变量及const局部变量。
栈是连续的lifo(后进先出)的存取方式,地址从上到下逐渐增加。
共享库:大约在地址空间的中间部分,是一块用来存放标准库和数学库这样的共享库代码和数据的区域。
如:printf函数等...
堆:运行时有malloc创建的运行时的堆。
存放程序员申请的内存空间,如 new Array()
堆是树状结构的无序的存储数据的方式。
程序代码和数据区:包括读/写数据和只读的代码和数据,对所有的进程来说,代码是从同一固定地址开始,
紧接着的是和C全局变量相对应的数据位置。代码和数据区是直接按照可执行目标文件的
内容初始化的。
可读写区用于存储全局变量和静态变量 的数据
只读区 存储代码
可读写区用于存储用户的数据:地址连续存储