一
.
概述
1.
内存段类型
段
在
上是对不同内存的使用目的和存放位置不同的区分。
使用以下几种段类
型。
程序文本
文本段包括了程序本身的可执行的机器代码
除动态链接库以外
。文本段一般标识为只读,因此它能被
多个进程共享来跑同一个程序。
初始化全局数据
这一段包括了被编译器初始化的全局数据,比如用于跟踪数据的字符串。初始化数据能被修改,因此
它不能被运行同一程序的多个进程共享。
很少使用这个段。
未初始化全局数据
未初始化全局数据一般称为
以符号开始的块
段。这一段包括了静态
分配的全局数据,这些数据在进程运行时被进程初始化。
也很少使用这个段。
数据堆
数据堆被用于进程在运行时,通过使用系统调用
或
动态分配内存。
将数据
!
用于
"
。
执行堆栈
#$
无论什么时候一个函数被调用,它的参数和返回上下文被
$ !
到一个执行堆栈中。返回上下文实际上
是一组
%
注册值,这些注册值描述了进程在调用函数时那一刻的状态。当调用结束后,堆栈被
而
上下文被保留,以使执行能从函数调用时的结构状态立即执行下去。堆栈同时还保留了代码块的本地变量。
堆栈大小依赖于函数嵌套或递归调用的深度、参数和本地变量所需的内存大小。
共享库
!&
共享库是一个与位置无关的可执行代码集,这个集合实现了许多程序——特别是系统调用功能——所
需要的功能。共享库段也是只读的,它被所有的进程
包括
进程
共享。共享库无需保存一份在内
存中。当调用了共享库中的一个函数后,进程需要打开共享库文件,然后通过系统调用
将它映
射到它的地址空间去。
使用共享库的另外一种方法是在程序文本段本身将需要的系统调用
$
进去。在那些不支持共享
库的操作系统中或用上面方式有问题时就需要这样做。在大多数操作系统中,
使用共享库作为来
实现系统调用而不是实现
代码本身。然而,
'(
类库都是编译好的,并且作为共享库动态链接的。
共享内存段
!)
共享内存允许关联的进程共同读写内存中的同样数据。每个需要在共享内存段中寻址的进程都需要先
阿里巴巴保密信息 / ALIBABA CONFIDENTIAL
评论