首页 > 代码库 > 内存分段 && 缓冲区

内存分段 && 缓冲区

一、内存中的程序:

  在进程被载入内存中时,基本上被分成许多小的节,以下是6个主要的节。

  低地址                                                   高地址

技术分享

 

 

.text 

  .text节基本上相当于二进制可执行文件的.text部分,它包含了完成程序任务的机器指令

  该节标记为只读,如果发生写操作,会造成 segmentation fault。

  在进程最初被加载到内存中开始,该节的大小就被固定。

.data  

  .data节用来存储初始化过的变量

   如: int  a = 0;

  该节的大小在运行时是固定的。

.bss  

  栈下节 (below stack section)用来存储未初始化的变量

  如: int  a;

  该节的大小在运行时是固定的。

节(空闲存储器)

  堆节(heap section)用来存储动态分配的变量,位置从低地址向高地址增长。

  内存的分配和释放通过malloc()和free()函数控制。

  栈节(stack section)用来跟踪函数调用(可能是递归),在大多数系统上从内存的高地址向低地址增长。

环境/参数

  环境/参数节(environment/ arguments section)用来存储系统环境变量的一份复制文件,进程在运行时可能需要。

  例如,运行中的进程可以通过环境变量来访问路径、shell名称、主机名等信息。该节是可写的。

  命令行参数也保存在该区域中。

二、缓冲区

  缓冲区(buffer)是指这样一个存储区域:该区域用来接收和保存数据,直至进程对数据进行处理。由于各进程都有缓冲区,

所以保持各进程缓冲区彼此无关是很重要的。通过在进程内存的 .data 和 .bss 节分配内存,可以做到这一点。

内存分段 && 缓冲区