V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ThinkStu
V2EX  ›  问与答

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

  •  
  •   ThinkStu · 2023-07-22 22:01:53 +08:00 · 1517 次点击
    这是一个创建于 497 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近对这个问题有疑惑,搜索了一圈答案后发现不止我有这个疑惑...
    第 1 条附言  ·  2023-07-23 09:51:43 +08:00
    比如我们常说的堆内存、栈内存,栈的效率要高于堆,堆是棵完全二叉树、栈先进后出等等🥲
    14 条回复    2023-07-23 11:59:51 +08:00
    lhx2008
        1
    lhx2008  
       2023-07-22 22:11:19 +08:00
    应该是同一个东西,内存本身没有堆和栈,说的应该都是程序的
    buxudashi
        2
    buxudashi  
       2023-07-22 22:11:24 +08:00
    换个问法。

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

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

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

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

    但 gap 很大、反推推不出来等现象是对于管理学和数据管理学都是真实存在的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2564 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:28 · PVG 18:28 · LAX 02:28 · JFK 05:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.