C/C++ 内存分配里的 堆和栈 与数据结构里的 堆和栈

本文介绍了C/C++中内存分配的堆和栈与数据结构中的堆和栈的区别。数据结构的堆栈关注数据的逻辑组织和读取,常用于排序和任务调度;而内存中的堆是动态内存池,程序员负责申请和释放,栈用于存放函数调用参数和局部变量,自动回收。堆分配灵活但需手动管理,不当使用可能导致系统隐患。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、

简单说 数据结构的堆和栈 与 内存分配里的堆和栈 没有关系

1.数据结构的 堆和栈 只是一种数据结构,侧重的是数据逻辑上的存放,读取,组织方式用在 排序和OS任务优先级调度
2.内存堆和栈 是实实在在的东西,堆可以想象成内存池

    作用主要是存放函数调用的参数和该函数分配的空间, 等调用结束, 自动回收这些分配的空间.

  是由操作系统负责管理的空间, 这块空间完全由程序员向系统申请, 也需要自己负责释放给会系统.一直申请却不给回,系统的其他程序就遭殃.

注:
1.函数内的变量,当函数离开就失去意义,所以不要返回他的指针.(栈)
2.要返回就拷贝一份.或者直接使用堆来分配.
3.堆分配可以跨函数,保持任意久的时间,但是光申请不给回系统,只会让电脑变慢.
4.堆分配的空间,虽然灵活,但是需要人工管理,往往造成很多系统的隐患.

二、
数据结构中的一般称“栈(stack)”,是一种后进先出的数据结构。它是一种概念,或者说是一种逻辑技术,与语言、平台无关。
内存管理中的“堆栈”其实是分为堆(heap)和栈(stack)的,以引用变量为例,引用变量本身存储在栈中,引用变量指向的值存储在堆中。
如int[] arr = {1, 2, 3};
变量arr(数组名)存储在栈中,变量arr的值(数组元素)存储在堆中(普通结构)。
内存管理中的栈采用的就是数据结构中的栈的思想,即遵循后进先出的管理方法。

好比数据结构中的栈是一项先进的技术,在内存管理中采用了该技术,在CPU的调度中可能也采用这种技术。

栈区是采用栈技术的内存区域,但不能认定凡是采用栈技术的区域都叫栈区,虽然目前的实际情况是这样。这是一个关于定义的准确问题。

三、

数据结构的堆栈就不说了,本质就是一种数据结构而已,内存中的堆栈表示的是两个不同使用方式的内存区,所有的全局变量都是放在堆上的,而程序的局部变量则是放在栈中的,叫堆栈是因为他们的使用方式类似于数据结构中的堆栈。
程序运行时内存的栈和数据结构的栈类似,这个栈主要用来放临时变量和函数参数的,结构也是先进后出
 
但内存的堆和数据结构的堆石两码事,内存的堆一般用来动态分配内存的,如malloc(),或c++里的new非配的内存就是动态分配的内存的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值