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

C++内存管理原则的更多相关文章

  1. OC基础--OC内存管理原则和简单实例

    ARC: 由于自己的学习视频太早,Xcode是iOS6版本,新建命令行项目后,系统会默认启动ARC机制,全程Automatic Reference Counting,简单的说,就是代码中自动加入了re ...

  2. Objective-C 内存管理原则

    内存管理方针 用于内存管理的基本模型采用引用计数的环境之中提供的组合方法中定义在NSObject协议和标准方法的命名约定.NSObject类也定义了一个方法:dealloc,当调用一个对象时自动回收, ...

  3. iOS开发系列—Objective-C之内存管理

    概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...

  4. objective-c 语法快速过(6)内存管理原理

    内存管理基本原理(最重要) 移动设备的内存极其有限(iphone 4内存512M),每个app所能占用的内存是有限制的(几十兆而已). 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不 ...

  5. OC内存管理

    内存问题 野指针异常:访问所有权的内存,如果想要安全访问,必须确保空间还在(确保访问的内存不是僵尸对象) 内存泄露:空间使用完之后没有及时释放 过度释放:对一块空间释放多次,立刻crash 内存溢出: ...

  6. OC中的内存管理

    一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需 ...

  7. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  8. OC中的内存问题

    常见的内存问题有以下几种: 1.野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 2.内存泄露:空间使用完之后没有及时释放 3.过度释放:对同一块存储空间释放多次,立刻crash ...

  9. Objective-C之集合对象的内存管理

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

随机推荐

  1. Exact Change

    设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数. cid ...

  2. HDU 2062 Subset sequence 数位dp,思路 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=2062 Subset sequence Time Limit: 1000/1000 MS (Java/Others ...

  3. C# 打开TXT文件读取内容

    控制关键字,有些关键字发短信发不出来,比如(金融)需要转化为(金.融) 要求:读取敏感字的,并且替换掉 using : using System.Collections.Generic;using S ...

  4. fegin---@FeginClient参数介绍

    一.FeignClient注解 @FeignClient标签的常用属性如下: name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现 ur ...

  5. 【转】netlink socket编程实例

    [转]netlink socket编程实例 转自:http://blog.chinaunix.net/uid-14753126-id-2983915.html 关于Netlink IPC方式的介绍,请 ...

  6. Goal+企互区别+Map

    1.目标:我想通过本学期这门java ee来提升自己对于java整合开发的应用技术,并加深对上学期学习的java的技术.java目前是应用最广泛的语言,对于企业级应用的开发来说学好java ee是非常 ...

  7. Redis数据结构:链表

    链表被广泛用于Redis的各种功能,比如列表键.发布与订阅.慢查询.监视器等. 每个链表节点由一个listNode结构表示,每个节点都有前置节点和后置节点. 每个链表使用一个list结构来表示,这个结 ...

  8. Tensorflow 运行警告提示 Your CPU supports instructions that this TensorFlow binary was not compiled to use

    由于现在神经网络这个东西比较火,准确的说是深度学习这个东西比较火,我们实验室准备靠这个东西发几个CCF A类的文章,虽然我不太懂这东西,兴趣也一般都是毕竟要跟随主流的,于是今天安装起了 Tensorf ...

  9. Android 编程 AMapLocationClientOption 类中的 setNeedAddress 方法用处 (高德地图 com.amap.api.location.AMapLocationClientOption 中的类)

    最近在用高德地图来写Android App, 其中有一些 方法是不太理解的,这里写一下 对  高德地图  com.amap.api.location.AMapLocationClientOption ...

  10. 【剑指offer】数字在排序数组中出现的次数,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 利用二分查找法,查找元素k在排序数组中第一次出现的位置m及最后一次出现的位置n,m-n+1即为元素k再排序数组中出现的次数.       二分查找法在数 ...