栈:
由系统自动管理,以执行函数为单位
空间大小编译时确定
函数执行时,系统自动分配一个stack
函数执行结束时,系统立即自动回收stack。

在c++中由程序员手动控制
手动分配new和malloc
手动释放delete 和free
具有全局性,总体大象无限制
容易造成内存泄露
Myclass fun()
{
Myclass c(10);
AClass a(100);
c.pa=&a;
return c; //传参相当于拷贝
}

如果没有拷贝构造函数的语言拷贝时利用memory copy,按字节拷贝。

注意:不要用指针指向栈对象,不要用堆对象指向栈对象。

Myclass *func()
{
Myclass *pa=new MyClass();
return pa;//返回值尽量不要返回指针。
}
在函数外部调用后难道需要调用者手动释放吗?
Myclass *psfun();
delete ps ;
堆对象内存模型
栈上放指针 ,堆上放真正的对象

栈对象内存模型

变量模型与使用

三种变量模型
对象 Myclass c
指针 Myclass *pc c=*pc //解引用
引用 Myclass &c2=c //别名地址一样 pc=&c// 对c取地址
注意:分清栈对象还时堆对象
Myclass *pc2=new Myclass();//堆对象
Myclass&c3=*p2;//c3引用堆对象

三种使用场景
声明对象 void func1(Myclass c){} //传对象 Myclass c1;
void func2(Myclass *pc){}//传指针 func1(c1)//传对象
传参 func2(&c1)//传指针
func1(c1)//传引用
void func3(Myclass &mc)//传引用
返回值

注意:一般传参的时候不要传对象,也慎用传指针,推荐用引用 传参成本较低。

void fun3(Myclass &mc)
{
Myclass *p=&mc;
delete p; 如果这里是堆对象不应在fun3内释放,谁创建谁释放。
}

void fun3(const Myclass &mc)//const 引用不会被改变。
{
Myclass *p=&mc;
delete p;
}

关于stack 和heap相关推荐

  1. 深入Java虚拟机:JVM中的Stack和Heap

    http://www.cnblogs.com/laoyangHJ/archive/2011/08/17/gc-Stack.html 在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里 ...

  2. JVM stack与Heap的区别

    stack用于静态内存分配,Heap用于动态内存分配 Stack is used for static memory allocation and Heap for dynamic memory al ...

  3. 关于JS里面的Call Stack and Heap

    关于JS里面的Call Stack and Heap Abstract What is the Call Stack and Heap in JS What is the difference bet ...

  4. stack vs heap:栈区分配内存快还是堆区分配内存快 ?

    作者 | 码农的荒岛求生 来源 | 码农的荒岛求生 有伙伴问到底是从栈上分配内存快还是从堆上分配内存快,这是个比较基础的问题,今天就来聊一聊. 栈区的内存申请与释放 毫无疑问,显然从栈上分配内存更快, ...

  5. stack 和 heap区别

    heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 堆和栈最大的区别在于堆是由低地址向高 ...

  6. 刷题upupup【Java中Queue、Stack、Heap用法总结】

    [Queue] 先进先出(First-In-First-Out),LinkedList实现了Queue接口.它只允许在表的前端进行删除操作,而在表的后端进行插入操作. add()       增加一个 ...

  7. 堆栈,数据,文本,heap,bss,text data,stack

    堆栈,数据,文本,heap,bss,text data,stack text data bss stack heap 段 根据APUE,程序分为下面的段:.text, data (initialize ...

  8. [Java]Stack栈和Heap堆的区别(终结篇)[转]

    首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: hea ...

  9. Stack(栈)和Heap(堆)的区别

    Stack 和 Heap在程序运行时均可用来存放对象,均存在于RAM中,那么二者有什么区别呢? Stack: 1. 处理器经由指针(stack pointer)提供直接支持.当程序分配一块新的内存时, ...

最新文章

  1. Ctrl+C提示是否终止shell脚本
  2. linux重装alsa,centos 6 安装alsa
  3. 走读OpenSSL代码----从一张奇怪的证书说起(五)
  4. java基本数据类型_Java 中有几种基本数据类型是什么?
  5. 【uniapp】Error during WebSocket handshake: Unexpected response code: 302
  6. 好看的php提示弹窗,漂亮的jquery提示效果(仿腾讯弹出层)
  7. SQL2005创建快照
  8. 【NOIP2001】【Luogu1049】装箱问题
  9. 使用python命令行参数sys.argv 做bat脚本
  10. python Asyncore.dispatcher 理解
  11. UML类与类的关系, 总算理解了关联和依赖在实际中的区别
  12. win10 Anaconda3 安装TensorFlow
  13. html5 canvas图片反色
  14. 基于 OS X Mavericks 系统
  15. Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源
  16. buildroot学习(七)——at91sam9g45软件平台更新
  17. 今日份PS练习|玻璃材质背景练习
  18. 分布式光伏运维服务器,户用分布式光伏电站运维指导手册——运维及安全
  19. 如何顺利通过c语言补考,大学里补考比考试难的学科,不想挂科最好认真学,尤其大一新生...
  20. 抓包工具Fiddler下载安装

热门文章

  1. Python基础----字符串
  2. Linux清除cache的几种方式
  3. jQuery实现轮播图--入门
  4. 用HTML5 Canvas为网页添加动态波浪背景
  5. Acey.ExcelX4.2版本发布
  6. 在Magento首页显示新产品怎么设置
  7. 如何建立内核级钩子控制操作系统实现程序隐身
  8. poto——剧院魅影——phantom of the opera
  9. exit(0)和exit(1)解释
  10. mongodb备份每一天的数据