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