堆内存和栈内存的区别

什么是栈内存?

栈内存是为线程流出来的临时空间,每一个线程都有它的临时空间,而且每一个栈都只能被当前的线程访问。
所以它是线程安全的。栈内存的分配和回收是由系统完成的。
当函数调用的时候 系统就会为这个函数分配栈空间,当函数返回后系统就会回收这片空间。
同理当其他函数被调用和返回的时候 也会被自动分配和回收

什么是堆内存?

平时用malloc和new 分配的空间就是堆内存 堆内存可以被动态调整,空间被程序员动态分配。
第一个缺点就是可能产生内存泄漏。malloc后的内存没有被free。
第二个缺点就是可能产生内存碎片。在分配和回收的时候 ,没有对内存上的内存碎片进行整理,
就是因为效率比较低,所以有很多内存分配器,没有栈分配的快。
第三个缺点就是线程不安全,堆内存可以被线程内的所有线程访问,多线程操作容易产生问题

什么时候分配在堆上 什么时候分配在栈上?

A *a =new A;
a这个对象以指针的形式分配在栈上 然后new 出来的空间分配堆上,a指向的是对应分配出来的那块内存

什么时候使用堆内存?什么时候使用栈内存呢?

在这里插入图片描述
大部分情况 大内存使用堆 小内存使用栈
原视频链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值