C++内存管理原则
2024-08-26 14:56:03
内存可分配的地方有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, 代码简洁, 稍微停顿无所谓.
最新文章
- 1500. Prime Gap 11 月 11日
- sql 循环语句几种方式
- 【转载】Extjs 中id与itemId的区别
- SSIS ->;>; Parameter
- 深入浅出Spring(四) Spring实例分析
- mysql数据库乱码
- How to get Directory size in IsolatedStorage of Windows Phone 8 App
- clamav 杀毒软件安装及使用配置
- ora-01190和ora-01110的解决方法
- MySQL SHOW TABLE 输出的每列详细介绍
- 关于SQL配置管理工具无法打开0x8004100e问题!
- C语言缓冲区
- Metasploit Framework(8)后渗透测试(一)
- Go语言基础之数据类型
- js格式化数字
- 解决百度云推送通知,不显示默认Notification
- 引用 自动化测试基础篇--Selenium Python环境搭建
- odoo开发笔记 -- odoo和postgresql数据库导入相关
- switch-case最容易忽视的一点
- sap gui 使用方法, sap logon
热门文章
- MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能
- Spark安装和简单示例
- Linux下MySQL小尝试
- 网页宽高clientWidth clientHeight获得数值不对的问题
- vim 插件 for gbasic
- 【LeetCode 228_数组】Summary Ranges
- 海康威视 嵌入到web页面相关问题
- 我也说说Emacs吧(5) - 基本编辑操作
- Java8安装配置
- ICCS 会议 Latex 压缩文件提交主要事项