• C++ 堆和栈 内存


    转自:https://www.zhihu.com/question/281940376

    https://www.cnblogs.com/Yekko/p/13508941.html

    这两个链接里说的有不一样的地方,到底以哪个为准,之后看cpprimer再确认。

    1.基本概念

    堆,英文是 heap,在内存管理的语境下,指的是动态分配内存的区域。这个堆跟数据结构里的堆不是一回事。这里的内存,被分配之后需要手工释放,否则,就会造成内存泄漏。

    • `new` 和 `delete` 操作的区域是 free store
    • `malloc` 和 `free` 操作的区域是 heap

    但 `new` 和 `delete` 通常底层使用 `malloc` 和 `free` 来实现,所以 free store 也是 heap。

    栈,英文是 stack,在内存管理的语境下,指的是函数调用过程中产生的本地变量和调用数据的区域。这个栈和数据结构里的栈高度相似,都满足“后进先出”(last-in-first-out 或 LIFO)。

    其中还提到了C++中的RAII,对堆的管理机制,目前还没学到,所以先不看。

    2.分配

    堆分配时需要连续的空间;栈式增长一般发生在函数调用的时候,

    void foo(int n)
    {
      …
    }
    
    void bar(int n)
    {
      int a = n + 1;
      foo(a);
    }
    
    int main()
    {
      …
      bar(42);
      …

    它的栈的变化:

    栈上的内存分配只需移动指针,释放也只是移动指针,因为栈是后入先出的特性,所以也不会存在内存碎片。

    就算发生了异常,栈内定义的对象也会自动调用析构函数。

  • 相关阅读:
    monitor system
    monitor disk
    manage account
    windows
    backup daily
    shell 脚本编程概述
    OGNL表达式
    Struts2各个功能详解(2)-输入校验和拦截器
    struts2各个功能详解(1)----参数自动封装和类型自动转换
    Struts2源码解析2
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13893236.html
Copyright © 2020-2023  润新知