内存管理

来源:互联网 发布:随身带了淘宝去异界 编辑:程序博客网 时间:2024/06/06 11:05

内 存 分 配 方 式 有 三 种 :

( 1 ) 从 静 态 存 储 区 域 分 配 。 内 存 在 程 序 编 译 的 时 候 就 已 经 分 配 好 , 这 块 内 存 在 程 序 的整 个 运 行 期 间 都 存 在 。 例 如 全 局 变 量 , s t a t i c 变 量 。

( 2 ) 在 栈 上 创 建 。 在 执 行 函 数 时 , 函 数 内 局 部 变 量 的 存 储 单 元 都 可 以 在 栈 上 创 建 , 函数 执 行 结 束 时 这 些 存 储 单 元 自 动 被 释 放 。 栈 内 存 分 配 运 算 内 置 于 处 理 器 的 指 令 集中 , 效 率 很 高 , 但 是 分 配 的 内 存 容 量 有 限 。

( 3 ) 从 堆 上 分 配 ,亦  称 动 态 内 存 分 配 。程  序 在 运 行 的 时 候 用 m a l l o c 或 n e w 申 请 任 意 多少 的 内 存 , 程 序 员 自 己 负 责 在 何 时 用 f r e e 或 d e l e t e 释 放 内 存 。 动 态 内 存 的 生 存 期由 我 们 决 定 , 使 用 非 常 灵 活 , 但 问 题 也 最 多 。



指 针 与 数 组 的 对 比

       数 组 要 么 在 静 态 存 储 区 被 创 建( 如 全 局 数 组 ),要 么 在 栈 上 被 创 建 。数 组 名 对 应 着( 而不 是 指 向 ) 一 块 内 存 , 其 地 址 与 容 量 在 生 命 期 内 保 持 不 变 , 只 有 数 组 的 内 容 可 以 改 变 。

      指 针 可 以 随 时 指 向 任 意 类 型 的 内 存 块 ,它  的 特 征 是“  可 变 ”,所  以 我 们 常 用 指 针 来 操作 动 态 内 存 。 指 针 远 比 数 组 灵 活 , 但 也 更 危 险 。


计 算 内 存 容 量

     C + + / C 语 言 没 有 办 法 知 道 指 针 所 指 的 内 存 容 量 , 除 非 在 申 请 内 存 时 记 住 它 


    c h a r  a [ ] = " h e l l o w o r l d " ;

    c h a r * p = a ;

    c o u t < < s i z e o f ( a ) < < e n d l ; / / 1 2 字 节

    c o u t < < s i z e o f ( p ) < < e n d l ; / / 4 字 节

    int  len = sizeof(a)/sizeof(*a);    //计算数组长度

  

    注 意 当 数 组 作 为 函 数 的 参 数 进 行 传 递 时 , 该 数 组 自 动 退 化 为 同 类 型 的 指 针 。

    下示 例 中 , 不 论 数 组 a 的 容 量 是 多 少 , s i z e o f ( a ) 始 终 等 于 s i z e o f ( c h a r * ) 。

    v o i d F u n c ( c h a r a [ 1 0 0 ] )

   {

        c o u t < < s i z e o f ( a ) < < e n d l ; / / 4 字 节 而 不 是 1 0 0 字 节

   }

   

   



0 0
原创粉丝点击