关于stack 和heap
栈:
由系统自动管理,以执行函数为单位
空间大小编译时确定
函数执行时,系统自动分配一个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相关推荐
- 深入Java虚拟机:JVM中的Stack和Heap
http://www.cnblogs.com/laoyangHJ/archive/2011/08/17/gc-Stack.html 在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里 ...
- JVM stack与Heap的区别
stack用于静态内存分配,Heap用于动态内存分配 Stack is used for static memory allocation and Heap for dynamic memory al ...
- 关于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 ...
- stack vs heap:栈区分配内存快还是堆区分配内存快 ?
作者 | 码农的荒岛求生 来源 | 码农的荒岛求生 有伙伴问到底是从栈上分配内存快还是从堆上分配内存快,这是个比较基础的问题,今天就来聊一聊. 栈区的内存申请与释放 毫无疑问,显然从栈上分配内存更快, ...
- stack 和 heap区别
heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 堆和栈最大的区别在于堆是由低地址向高 ...
- 刷题upupup【Java中Queue、Stack、Heap用法总结】
[Queue] 先进先出(First-In-First-Out),LinkedList实现了Queue接口.它只允许在表的前端进行删除操作,而在表的后端进行插入操作. add() 增加一个 ...
- 堆栈,数据,文本,heap,bss,text data,stack
堆栈,数据,文本,heap,bss,text data,stack text data bss stack heap 段 根据APUE,程序分为下面的段:.text, data (initialize ...
- [Java]Stack栈和Heap堆的区别(终结篇)[转]
首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: hea ...
- Stack(栈)和Heap(堆)的区别
Stack 和 Heap在程序运行时均可用来存放对象,均存在于RAM中,那么二者有什么区别呢? Stack: 1. 处理器经由指针(stack pointer)提供直接支持.当程序分配一块新的内存时, ...
最新文章
- Ctrl+C提示是否终止shell脚本
- linux重装alsa,centos 6 安装alsa
- 走读OpenSSL代码----从一张奇怪的证书说起(五)
- java基本数据类型_Java 中有几种基本数据类型是什么?
- 【uniapp】Error during WebSocket handshake: Unexpected response code: 302
- 好看的php提示弹窗,漂亮的jquery提示效果(仿腾讯弹出层)
- SQL2005创建快照
- 【NOIP2001】【Luogu1049】装箱问题
- 使用python命令行参数sys.argv 做bat脚本
- python Asyncore.dispatcher 理解
- UML类与类的关系, 总算理解了关联和依赖在实际中的区别
- win10 Anaconda3 安装TensorFlow
- html5 canvas图片反色
- 基于 OS X Mavericks 系统
- Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源
- buildroot学习(七)——at91sam9g45软件平台更新
- 今日份PS练习|玻璃材质背景练习
- 分布式光伏运维服务器,户用分布式光伏电站运维指导手册——运维及安全
- 如何顺利通过c语言补考,大学里补考比考试难的学科,不想挂科最好认真学,尤其大一新生...
- 抓包工具Fiddler下载安装