zoukankan      html  css  js  c++  java
  • C++内存管理原则

    内存可分配的地方有2个: 栈Stack和堆Heap.

    内存管理的方式有3种: RAII, 智能指针或者GC. 不推荐自己管理裸指针.

    C++的内存管理其实是一个哲学问题: 怎样才能确定一个东西没有被其他地方使用?

    原则1: 如果2个并列的栈要共享数据(非成员变量),则共享内存必须分配在堆Heap, 用智能指针或者GC管理.

    // func1(), func2() 为2个并列的栈
    func()
    {
        // mem指向的内存由func1()内用new关键字分配, 返回一个智能指针
        shared_ptr<Mem> mem = func1();
        
        func2( mem ); // func2()内部使用 mem 也必须嵌套, 不能异步之类
    }
    

     多线程也属于并列的栈.

    原则2:  如果2个嵌套的栈要共享数据, 则共享内存可分配在栈Stack, 由RAII自动管理.

    // func1() 和 func2() 为2个嵌套的栈
    func1() {
       Mem mem; // 在func1()内分配内存, 退出func1()时RAII自动释放
       func2( &mem );
    }
    

    原则3:  如果共享数据尺寸太大,则共享内存必须分配在堆Heap, 用智能指针或者GC管理.

    无需解释, 栈尺寸有限制.

    原则4: 客户端应用使用智能指针, 能得到更好的响应; 服务器应用使用GC, 代码简洁, 稍微停顿无所谓.

  • 相关阅读:
    Python学习——列表
    第04组 Alpha冲刺(3/6)
    第04组 Alpha冲刺(2/6)
    第04组 Alpha冲刺(1/6)
    第04组 团队Git现场编程实战
    第04组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第4组 团队展示
    第一次结对编程作业
  • 原文地址:https://www.cnblogs.com/mrfangzheng/p/4440686.html
Copyright © 2011-2022 走看看