你的位置:首页 > 软件开发 > 操作系统 > UNIX高级环境编程(15)进程和内存分配 故宫角楼

UNIX高级环境编程(15)进程和内存分配 故宫角楼

发布时间:2016-04-21 23:00:09
故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详。 首先,了解一下进程的基本概念,进程在内存中布局和内容。此外,还需要知道运行时是如何为动态数据结构(如链表和二叉树)分配额外内存的。一 进程1 进程和程序进程:是一个可执行程序的实例。程序:包含一系列信 ...

UNIX高级环境编程(15)进程和内存分配  故宫角楼

故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详。

UNIX高级环境编程(15)进程和内存分配  故宫角楼

 

首先,了解一下进程的基本概念,进程在内存中布局和内容。

此外,还需要知道运行时是如何为动态数据结构(如链表和二叉树)分配额外内存的。

一 进程

1 进程和程序

进程:是一个可执行程序的实例。

程序:包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程。包含如下信息:

  1. 二进制格式标识:如最常见的ELF格式。
  2. 机器语言指令:对程序算法进行编码。
  3. 程序入口地址:标识程序开始执行时的起始指令位置。
  4. 数据:程序文件包含的变量初始值和程序使用的字面常量值,如字符串。
  5. 符号表和重定位表:描述程序中函数和变量的位置及名称。
  6. 共享库和动态链接信息:程序文件中所包含的一些字段,列出了程序运行时需要使用的共享库,以及加载共享库的动态链接器的路径名。
  7. 其他信息。

进程的再定义:进程是由内核定义的抽象的实体,并为该实体分配用以执行程序的各项系统资源。

从内核的角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。

2 典型的进程内存布局

UNIX高级环境编程(15)进程和内存分配  故宫角楼

每个进程所分配的内存由很多部分组成,通常称之为“段(segment)”。如上图所示:

  1. 文本段:包含进程运行的程序机器语言指令。文本段具有只读属性,因此多个进程可同时运行同一程序,共享文本段。
  2. 初始化数据段:包含显式初始化的全局变量和静态变量。当程序加载到内存时,从可执行文件中读取这些变量的值。
  3. 未初始化数据段(BSS段,block started by symbol):包含了未进行显式初始化的全局变量和静态变量。程序启动之前,系统将本段内所有内存初始化为0.所以又叫做零初始化数据段。
  4. 栈(stack):动态增长和收缩的段,由栈帧(stack frame)组成。系统会为每个当前调用的函数分配一个栈帧。栈帧中存储了函数的局部变量、实参和返回值。
  5. 堆(heap):在运行时为变量动态进行内存分配的一块区域。堆顶端成为程序中断(program break)
将经过初始化的全局变量和静态变量与未经过初始化的全局变量和静态变量分开存放,其主要原因在于程序在磁盘上存储时,没有必要为未经过初始化的变量分配存储空间。相反,可执行文件只需记录未初始化数据段的位置及所需要大小,直到运行时再由程序加载器来分配这一空间。

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:UNIX高级环境编程(15)进程和内存分配 故宫角楼

关键词:内存

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。