c++ - 我对缓冲区的理解是否正确?

标签 c++ vector buffer bytebuffer

我最近一直在学习缓冲区,我想检查一下我是否理解正确。我必须以二进制格式读入一个文件,这会产生一个字节序列。为了在我的程序中使用这些字节,我必须将它们存储在一个 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/

相关文章:

c++ - 尝试针对旧的 STD 库和 Windows SDK 进行编译时出现链接错误

c++ - 'ios' : is not a class or namespace name

c++ - 由非扩展分配函数创建的 char 数组

c++ - 是否可能/建议将 vector 存储在结构中? C++

r - 测试缓冲区是否已在 R 中刷新

Python从Buffer中读取数据

c++ - 不确定为什么我的程序不显示

python - Pybind11 类型错误

C++ 将 vector 推回 vector

c - Websocket key 哈希