什么是栈内存?
栈内存是为线程流出来的临时空间,每一个线程都有它的临时空间,而且每一个栈都只能被当前的线程访问。
所以它是线程安全的。栈内存的分配和回收是由系统完成的。
当函数调用的时候 系统就会为这个函数分配栈空间,当函数返回后系统就会回收这片空间。
同理当其他函数被调用和返回的时候 也会被自动分配和回收
什么是堆内存?
平时用malloc和new 分配的空间就是堆内存 堆内存可以被动态调整,空间被程序员动态分配。
第一个缺点就是可能产生内存泄漏。malloc后的内存没有被free。
第二个缺点就是可能产生内存碎片。在分配和回收的时候 ,没有对内存上的内存碎片进行整理,
就是因为效率比较低,所以有很多内存分配器,没有栈分配的快。
第三个缺点就是线程不安全,堆内存可以被线程内的所有线程访问,多线程操作容易产生问题
什么时候分配在堆上 什么时候分配在栈上?
A *a =new A;
a这个对象以指针的形式分配在栈上 然后new 出来的空间分配堆上,a指向的是对应分配出来的那块内存
什么时候使用堆内存?什么时候使用栈内存呢?
大部分情况 大内存使用堆 小内存使用栈
原视频链接