一、
简单说 数据结构的堆和栈 与 内存分配里的堆和栈 没有关系。
1.数据结构的 堆和栈 只是一种数据结构,侧重的是数据逻辑上的存放,读取,组织方式。用在 排序和OS任务优先级调度
2.内存堆和栈 是实实在在的东西,堆可以想象成内存池。
栈作用主要是存放函数调用的参数和该函数分配的空间, 等调用结束, 自动回收这些分配的空间.
堆是由操作系统负责管理的空间, 这块空间完全由程序员向系统申请, 也需要自己负责释放给会系统.一直申请却不给回,系统的其他程序就遭殃.
注:
1.函数内的变量,当函数离开就失去意义,所以不要返回他的指针.(栈)
2.要返回就拷贝一份.或者直接使用堆来分配.
3.堆分配可以跨函数,保持任意久的时间,但是光申请不给回系统,只会让电脑变慢.
4.堆分配的空间,虽然灵活,但是需要人工管理,往往造成很多系统的隐患.
二、
数据结构中的一般称“栈(stack)”,是一种后进先出的数据结构。它是一种概念,或者说是一种逻辑技术,与语言、平台无关。 内存管理中的“堆栈”其实是分为堆(heap)和栈(stack)的,以引用变量为例,引用变量本身存储在栈中,引用变量指向的值存储在堆中。 如int[] arr = {1, 2, 3}; 变量arr(数组名)存储在栈中,变量arr的值(数组元素)存储在堆中(普通结构)。 内存管理中的栈采用的就是数据结构中的栈的思想,即遵循后进先出的管理方法。 好比数据结构中的栈是一项先进的技术,在内存管理中采用了该技术,在CPU的调度中可能也采用这种技术。
栈区是采用栈技术的内存区域,但不能认定凡是采用栈技术的区域都叫栈区,虽然目前的实际情况是这样。这是一个关于定义的准确问题。
三、
数据结构的堆栈就不说了,本质就是一种数据结构而已,内存中的堆栈表示的是两个不同使用方式的内存区,所有的全局变量都是放在堆上的,而程序的局部变量则是放在栈中的,叫堆栈是因为他们的使用方式类似于数据结构中的堆栈。
程序运行时内存的栈和数据结构的栈类似,这个栈主要用来放临时变量和函数参数的,结构也是先进后出 但内存的堆和数据结构的堆石两码事,内存的堆一般用来动态分配内存的,如malloc(),或c++里的new非配的内存就是动态分配的内存的。