什么是栈和堆
我们这里说的栈和堆,是指内存空间中的两块不同区域,不是指数据结构中的Heap、Stack
之所以他们都叫栈和堆,是因为这两个词本来就是生活中描述外形的词语
只要外形差不多,都可以这么叫,一个是数据结构的外形,一个是内存结构的外形,如此而已
内存中的栈和堆有什么区别
栈是程序启动时,操作系统为进程预分配的固定内存空间
堆是程序运行时,向操作系统申请,动态分配的内存空间
寄存器对栈可以直接寻址,而堆则需要间接寻址
堆的空间较小,是队列结构,分配和查找速度更快
堆的空间很大,是二叉树结构,分配和查找速度慢
为什么要把内存分成栈和堆两块区域
如果全部用堆,显然对程序性能没任何提升
如果全部用栈,由于栈是在程序启动时立刻分配的,会导致每个进程都占用大量资源,整个系统的性能就会出现问题
因此把需要频繁调度的数据,像函数地址、对象地址等,放入栈区域,对程序和系统来说,效率是最佳的
C++中的栈和堆分别存放什么
在C++中,堆用来存储对象的完整字节数据
栈则来存放堆对象的地址,以及函数调用过程中产生的局部变量,参数和返回值等