malloc函数在Linux系统下的原理性实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其 实现 原理 和 工 作机 制 。 m l 但 ao l c函数 在 Lnx系统 下是 不 能 直接 使 用 的 , 给 C程 序 的 编 写 和移 植 带 来 了很 大 的 不便 。 iu 这 基
于这 种 原 因 , 出 了在 Ln x系统 下 m l c ) 实 现 方 法 。 提 iu al ( 的 o
# n l d sd i . > i c l e< t l h J b
^
8
8
l C Байду номын сангаас
1 6
D
2 4
l E
m i0 an 空 廷 开 忙坶 掰 婿 , 进程 I {l : S it n, r y /c t 一 个 计 数 器 ,r y 一 个 整 型 n t ar ;*n 是 c * a ar 是 a 图 1 空 闲链 表 指 针 . 于 指 向 整 型数 组 的首 地 址 , 用 3 malc ) Ln x系 统 下 的 实现 、 l ( 在 iu o i( ry ( t m lc( i o i ):= U L fa a=i ) a o 1 s efn ) N L ) (r n 0 z ( t) 3 1m l c ) . a o ( 分配 内存 前 的 初 始 化 l { mal e ii 是 初 始 化 内 存 分 配 程 序 的 函 数 。 它 完 成 以下 三 lo nt p t”  ̄ f 分配 存 储 空 间 失 败 !” ( ) ;
* lc( z ) 里 的 se t 在 s l . mao s e t ; l i n这 i 是 z t i h中定 义 的 一 个 类 型 , db 它 是 一 个 无 符 号 整 型 这个 整 型 能够 满 足所 有 对 存 储 块 大 小 描 述 的 需 要 。ma o ( 的返 回值 为fo 1 型 . 分 配 一 段 能 存 放 l e) l vi 类 d 它 大 小 为 n的 数 据 的 存 储块 ,返 回对 应 的指 针 值 :如 果 申请 失 败 ( 找不 到 能 满 足 要 求 的存 储 块 ) 返 回 N L 在 使 用 时 , 该 把 就 UL 应 m lc ) 返回值转换 到特定指针类型 , 给一个 指针变量 , ao(的 l 赋 如 程 序 1 。 程 序 1 动态 分配 存 储 单 元 ) ( :
【 关键词 】 m l ef eLnx d nm cm mo a oa o ; : a o ; e ;iu ;y a i e  ̄ l ct n l r l i
0、 言 引
破 坏 程 序 的运 行 , 可 能 造成 本 程 序 或 者 整 个 操 作 系 统 的 崩溃 还
用 C语 言 来 编写 高 质 量 的 代 码 . 内存 的 动 态 分 配 是 非 常 2 malc( 的 工作 机制 对 、 l o ) 重要 的 。要 进 行 内存 的 动 态 分 配 . a o ( 函数 是 实 现 的方 法 之 m 1c) 1 ia o n l e函数 的实 质 是 它有 一个 将 可 用 的 内 存 块 连 接 为 一 个 在 X8 6操 作 系 统 下我 们 可 以很 方便 的 调 用 I l c ) l l ( 函数 来 长长 的列 表 的所 谓 空 闲 链 表 [ 。 用 m l c ) l o a 2 调 】 al ( 函数 时 , o 它沿 着 连 实 现 内 存 的 动 态 分 配 。但 是 在 n x系 统 下 ,是 不 能 直 接 实 现 接 表 寻 找 一 个 大 到 足 以满 足 用 户请 求所 需要 的 内存 块 。 后 . u 然 将 mao ( 函 数 的 功 能 的 。 这使 得 在 Ln x下 编 写 C程 序 , 者 说 该 内存 块 一 分 为 二 ( 块 的大 小与 用 户 申请 的 大小 相 等 . 一块 lc ) l i u 或 一 另
一
。
将 编 写好 的 程 序 移 植 到 Ln x系统 下 . 成 了 很 多 不 便 的地 方 iu 造
的大 小 就 是 剩 下 来 的 字 节 ) 。接 下 来 . 分 配 给 用 户 的 那 块 内存 将 文章 就 通 过 对 m l e ) al ( 函数 的原 理 进 行 分 析 后 . 在 “nx系 统 存 储 区 域 传 给 用 户 , 将 剩 下 的 那 块 ( 果 有 的 话 ) 回 到 连接 o 再 u 并 如 返 下实 现 m l ( 函 数 的 功能 。 l c ao ) 表 上 。 用 f e函 数 时 . 将 用 户 释 放 的 内存 块 连 接 到 空 闲 链表 调 r e 它 l malc介 绍 、 l o 上 。到 最 后 , 闲链 会 被 切 成 很 多 的小 内存 片段 . 果 这 时 用 户 空 如 C语 言 对 内存 的 动 态 存 储 管 理 由 一 组 标 准 库 函 数 来 实 现 申请 一 个 大 的 内 存 片段 .那 么 空 闲链 表 上 可 能 没 有 可 以满 足用 的 , 函数 原 型 在 头 文 件 s l . 描 述 『1需 要 用 这 些 功 能 时 户 要 求 的 片 段 了 。 是 , a o ( 函数 请 求 延 时 . 开 始 在 空 闲链 其 t i h里 db 1, 于 m lc ) 并
应 包 含 这 个 头 文 件 。 动 态存 储单 元 分 配 有 关 的 函数 共有 4个 . 表 上 检 查 各 内存 片段 . 它 们 进 行 内存 整 理 . 与 对 将相 邻 的 小 空 闲块 其 中就 包 括 动 态 内 存 分 配 函 数 m l c ( 。其 函 数 原 型 是 :o 合 并 成 较 大 的 内 存块 。 如 图 l所 示 : ao ) l vi d
14 5
福
建 电
脑
21 0 0年第 6期
m l c函数 在 Ln x系统 下 的原 理 性 实现 ao l iu
贺 伟
(阿 坝 师 范 高等 专 科 学校 电子 信 息 工 程 系 四 川 郫 县 6 1 4 1 7 1)
【 摘
要】 :ma o ( 函数是 C语 言中进行 内存 动态分配的标准库 函数。文章对 mao ( 函数进行 简要 的介绍并分析 了 lc) l l c) l