进程的地址空间的布局

进程的地址空间的布局_第1张图片
创建一个进程时,操作系统会为该进程分配一个4G大小的进程地址空间。

**栈:**存放程序临时创建的局部变量,也就是代码块或者函数之内的变量,但不包含static修饰的(static修饰的变量存放在数据段);还存放函数参数和返回值等;它分配的内存是在一块的连续内存区域内,当声明变量时,编译器会按照一定规则,自动接着当前栈区的结尾来分配内存.

**堆:**存放动态分配的内存,比如:malloc和new出来的空间:对在内存中的分布式不连续的,它们是不同的区域的内存块通过指针链接起来,一旦某一个节点从中断开,我们就需要人为的把断开的节点从内存中释放。

栈和堆相对而生,栈从高地址到低地址,堆从低地址到高地址。

**BBS未初始化数据段:**存放程序中的未初始化的全局变量

**已初始化数据段:**存放程序中已初始化的全局变量。数据段属于静态分配。

**代码段:**存放程序指向代码的一段内存区域,部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些也允许代码段是可写的,即允许修改程序。在代码段中,也可能存在一些只读的常数变量,如:字符串常量等。

你可能感兴趣的:(进程的地址空间的布局)