我最近一直在学习缓冲区,我想检查一下我是否理解正确。我必须以二进制格式读入一个文件,这会产生一个字节序列。为了在我的程序中使用这些字节,我必须将它们存储在一个 vector 中,然后我可以遍历 vector 中的每个元素。
因此,缓冲区不是像 vector 那样的实际数据类型,而是以更好/更易于访问的格式临时存储数据以便使用的东西。这个定义正确吗?我认为这没有任何区别,但我使用的语言是 C++。
最佳答案
我认为您适合这种特殊情况,您正在使用临时存储将字节读入内存,然后将其 reshape 为您的程序需要的实际数据格式。
但是:术语缓冲区在不同的上下文中用于许多事物。
例如,缓冲区可以是用于从文件读取到内存的内存,因此当源请求单个字符(或少量字节)时,运行时库不必一路向下进入 OS 内核以请求一个或少量字节,但会分摊一千字节或几千字节数据的开销。这通常隐藏在 C 或 C++ 运行时中。
在 C++ 中,std::stream
的内部实现使用 std::streambuf
来处理文件 I/O 的低级缓冲机制。
在其他情况下,它是系统忙于做其他事情时存储按键的地方,直到应用程序有时间从键盘输入中读取。
同样,在屏幕上显示实际视频内容之前,有缓冲区可以从 Internet 读取视频流。因为如果视频播放器在使用时一次只请求几个字节,请求的开销会使播放非常不稳定。
另一个例子是使用 OpenCL(或例如 Cuda)在 GPU 上处理一些数据的应用程序,并需要一些内存来存储数据,然后调用 clCreateBuffer(..., size, .. .)
将返回一个内存对象来存储 size
字节。
在计算机中还有许多其他地方使用术语缓冲区。 (在计算机以外的领域,例如化学 [一种抵抗或帮助限制 pH 变化的化合物] 和火车 [马车尾部的“碰撞停止”])。
关于c++ - 我对缓冲区的理解是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48073532/