内存可分配的地方有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, 代码简洁, 稍微停顿无所谓.

最新文章

  1. 1500. Prime Gap 11 月 11日
  2. sql 循环语句几种方式
  3. 【转载】Extjs 中id与itemId的区别
  4. SSIS -&gt;&gt; Parameter
  5. 深入浅出Spring(四) Spring实例分析
  6. mysql数据库乱码
  7. How to get Directory size in IsolatedStorage of Windows Phone 8 App
  8. clamav 杀毒软件安装及使用配置
  9. ora-01190和ora-01110的解决方法
  10. MySQL SHOW TABLE 输出的每列详细介绍
  11. 关于SQL配置管理工具无法打开0x8004100e问题!
  12. C语言缓冲区
  13. Metasploit Framework(8)后渗透测试(一)
  14. Go语言基础之数据类型
  15. js格式化数字
  16. 解决百度云推送通知,不显示默认Notification
  17. 引用 自动化测试基础篇--Selenium Python环境搭建
  18. odoo开发笔记 -- odoo和postgresql数据库导入相关
  19. switch-case最容易忽视的一点
  20. sap gui 使用方法, sap logon

热门文章

  1. MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能
  2. Spark安装和简单示例
  3. Linux下MySQL小尝试
  4. 网页宽高clientWidth clientHeight获得数值不对的问题
  5. vim 插件 for gbasic
  6. 【LeetCode 228_数组】Summary Ranges
  7. 海康威视 嵌入到web页面相关问题
  8. 我也说说Emacs吧(5) - 基本编辑操作
  9. Java8安装配置
  10. ICCS 会议 Latex 压缩文件提交主要事项