内存的堆栈定义和数据结构的堆栈定义是同一个东西吗?

292 天前
 ThinkStu
最近对这个问题有疑惑,搜索了一圈答案后发现不止我有这个疑惑...
1283 次点击
所在节点    问与答
14 条回复
lhx2008
292 天前
应该是同一个东西,内存本身没有堆和栈,说的应该都是程序的
buxudashi
292 天前
换个问法。

逻辑地址跟实际地址是一一对应吗?

关键地址可以不连续啊。只要逻辑上正确就好了。
emnkcn
292 天前
数据结构中的堆栈是一种纯理论上的抽象,定义了堆栈最基本的结构和行为。内存中的堆栈是真正实现出来的堆栈,比如内存中的栈在函数调用时对栈帧的操作就符合数据结构中对栈的行为的定义。或许可以简单类比成类和对象的关系来理解?
lhx2008
292 天前
@lhx2008 想歪了,程序的堆栈应该和数据结构的不是一个东西
GeruzoniAnsasu
292 天前
nightwitch
292 天前
内存没有堆栈的概念,定义堆栈的操作系统和 c lib 的约定。 栈和数据结构里的那个栈的概念差不多能对上,堆完全不是一回事
me1onsoda
292 天前
数据结构里有堆栈这个东西?堆是堆,栈是栈
LeeReamond
292 天前
很好的问题,认真学过的很多人都有过这个疑问。
省流:C 语言编译程序存储上的栈确实与数据结构的栈相关,执行先进后出操作。内存上的堆和数据结构的堆没啥关系,内存上的堆大概就是一堆东西随便往哪放的意思。。。
ho121
292 天前
没有堆栈这个东西,堆是堆,栈是栈。
内存相关的堆栈指的是应用程序中的内存区域,堆内存,栈内存。
数据结构中的堆和栈,是两种不同的数据结构。
两个堆其实没有什么关系,只是名字一样。
两个栈倒是有点关系,栈内存实现了栈这种数据结构。
dynos01
292 天前
的确是非常让人迷惑的用语,尤其是为什么动态分配的区域要叫“堆”(英文也对得上,”heap”)?这个是历史遗留了,最起码上个世纪 70 年代初就有人这么叫(起源不太可考了),然后传到现在。而数据结构意义上的堆是 1964 年发表的(堆排序)。
satoru
292 天前
Stack 比较好理解,内存管理的实现用的 ADT 确实就是 Stack (主要的操作是 push & pop )
Heap 就有点让人迷惑,在 Stackoverflow 上有人问过
https://stackoverflow.com/questions/1699057/why-are-two-different-concepts-both-called-heap
satoru
292 天前
“堆栈”这个让人迷惑的词应该就是翻译的问题了
现在搜索这个词,还能看到 Wiki 上对应的页面
按上面的说法它对应的就是 Stack ,同时还有“堆叠”、“栈”等叫法
charlie21
292 天前
一部分计算机知识其实很像管理学(运筹学),学好理论即可(数据管理学的理论)。而明确的是,课本上的管理学理论(运筹学理论)根本无法用来管理实际的组织因为在联系实际的时候有太多额外因素需要考虑,而实际组织的管理反推到管理学理论是根本推不通的、不该去反推的
charlie21
292 天前
在管理学里,经常遇到你视角看到的实际情况 和 之前说的完全不一样(和课本上讲的课本理论完全不一样)的时候,所以人们都知道那是管理学理论和实际之间的 gap 。

在数据管理学里,这样的 gap 也是存在的。只不过它会要求一个人去很费劲地 mapping ( mapping 实际情况 和 之前说的/课本理论)。
为什么呢?为什么 gap 这么大还要去作 mapping 呢?仅仅因为你需要去 “造” 即在实际情况里基于现状和课本理论去给实际情况添加东西。

而在管理学里,你是不需要这么 mapping 的,因为一个初入行的人是一个被管理的人,你不需要去造东西因为不需要你去造东西。

但 gap 很大、反推推不出来等现象是对于管理学和数据管理学都是真实存在的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/958878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX