【问题标题】:What is the difference between memory, buffer and stack? [duplicate]内存,缓冲区和堆栈之间有什么区别? [复制]
【发布时间】:2014-01-09 19:03:41
【问题描述】:

虽然学习C编程只提到了memory,但在实践中似乎还有更多; bufferstack 也被使用。

这些术语有什么区别?为什么它们是相关的?

拜托,我需要一个详细的答案。简短的答案不能服务。还有一些资源可能会有所帮助。

【问题讨论】:

  • 根据您的要求,我不会回答这个问题,但简而言之,堆栈和缓冲区是内存中的特定位置。 “栈”是函数栈,一个保存所有局部变量的栈数据结构。缓冲区通常可以在各种情况下使用,它们存储临时数据,然后进行处理。
  • 您的意思可能是“堆”而不是“缓冲区”。前者总是与堆栈不同。后者是一块内存。
  • 如果这个问题是在 7 年前提出的,它会得到大量的支持,这个网站的虚伪令人震惊

标签: c memory stack buffer


【解决方案1】:

缓冲区临时存储数据,而数据是从一个地方移动到另一个地方的过程,即输入设备到输出设备。你可以说缓冲区是内存的一部分。您可以说缓冲区是内存的预分配区域,您可以在处理数据时存储数据。

来自here

另一方面,缓冲区主要位于 RAM 中,并充当 CPU 可以临时存储数据的区域。这个区域被使用 主要是电脑和其他设备有不同的时候 处理速度。通常,数据按原样存储在缓冲区中 从输入设备(例如鼠标)或在它之前检索 发送到输出设备(如扬声器)。但是,缓冲区可能 也可用于在计算机内的进程之间移动数据。

因此,计算机将数据写入缓冲区,从那里 设备可以访问数据,作为它自己的速度。这允许计算机 把数据写好后能够专注于其他事情 缓冲区;与不断关注数据相反,直到 设备完成。

缓冲区可以在硬件中的固定内存位置实现,或者 通过在软件中使用虚拟数据缓冲区,它指向一个数据 缓冲区存储在物理存储介质上。大多数 软件中使用了缓冲区。这些缓冲区通常使用 更快的 RAM 来存储临时数据,因为 RAM 的访问速度要快得多 时间比硬盘驱动器。缓冲区通常通过以下方式调整时间 在内存中实现队列或 FIFO 算法。因此,往往 以一种速率将数据写入队列并以另一种速率读取 率。

Stack 是一组项目,其中数据从称为堆栈顶部的一端插入和删除。

在计算机科学中,堆栈是一种特殊的抽象数据 主要(或唯一)操作的类型或集合 集合是将实体添加到集合中,称为 实体的推送和移除,称为 pop

【讨论】:

  • 你教@rullof 如何搜索互联网? ;-)
  • @FiddlingBits:- 当你看到有问题的Please, i need a detailed answer. Short answers can't serve. 这样的行时,你别无选择;)
  • @RahulTripathi 坦克。缓冲好。对于堆栈,我知道 LIFO 的原理是什么,但我不知道它与程序和处理有什么关系,了解它有什么重要意义。
  • @rullof:- 虽然我没有很清楚地理解你的意思,但我会告诉你,IIRC 编译器在检查 if/else 之类的东西时会使用堆栈。编程语言中的命令(如递归方法调用)也使用堆栈来为每个调用排序或优先级
【解决方案2】:

内存是存储有关程序的指令和数据的存储空间。 缓冲区和堆栈都是内存的一小部分。

缓冲区在程序执行时临时存储数据。

Operating System Concepts (8th ED):

缓冲区是存储在两个设备之间或设备与应用程序之间传输的数据的内存区域。

另一方面,堆栈是根据后进先出 (LIFO) 原则插入和移除的对象的容器。在下推堆栈中,只允许两种操作:将项目推入堆栈,并将项目从堆栈中弹出。堆栈是一种访问受限的数据结构——元素只能在堆栈顶部添加和删除。 push 将一个项目添加到堆栈顶部,pop 从顶部移除该项目。

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 2011-03-29
    • 2017-11-24
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2016-08-18
    • 2011-04-23
    相关资源
    最近更新 更多