进程地址空间布局

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/han8040laixin/article/details/82799603

在这里插入图片描述

创建一个进程时,操作系统会为该进程分配一个 4GB 大小的进程地址空间,本文具体讲的是进程地址空间的各个部分:
栈:
存放程序临时创建的局部变量,也就是代码块之内或者函数之内的变量,但不包括static修饰的(static修饰的变量放在数据段);还存放函数参数和返回值等;它分配的内存是在一块连续的内存区域内,当声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存。


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

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

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

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

猜你喜欢

转载自blog.csdn.net/han8040laixin/article/details/82799603