linux 进程的内存布局

在进程中,分配了很多的内存空间,这些一个个的内存空间 ,可以称之为 “段”
简单理解进程就是“一个独立的程序 ”在C中就是 有一个main入口的程序
(针对UNIX 进程虚拟内存分配的情况进行探讨)

小知识点:
进程开辟的内存是虚拟内存,不是物理内存,但是 在程序中使用的偏移地址指的就是真正的 物理内存地址,虚拟内存和物理内存中,存在着一个 映射的问题(以后对内核的内存管理分析的时候会具体的讲)
下面先来点简单的.

下面是进程的内存分布介绍:

首先是文本段 :
这里面存储了进程运行的程序机器指令语言(写的逻辑什么的全都在这里)
然后是数据段:
显示初始化的全局变量和静态变量,当程序加载到内存中时,从可执行文件中读取这些变量的值
然后是BSS段:
英文全称是:block started by symbol
未进行显示初始化的全局变量和静态变量
为什么会有这个BSS段
程序在磁盘中存储的时候,没有必要为未经初始化的变量进行分配存储空间
栈:
是一个动态增长和收缩的段,由栈帧组成,系统会为每一个当前调用的函数分配一个栈帧,在栈帧了存储了函数的局部变量,实参和返回值

堆:
是在运行时为变量动态进行内存分配的一块儿区域

下面是进程内存的一个分布图:
在这里插入图片描述:
linux 进程的内存布局