繁体   English   中英

我对缓冲区的理解正确吗?

[英]Is my understanding of a buffer correct?

我最近一直在学习缓冲区,我想检查一下我是否正确理解它们。 我必须读取二进制格式的文件,这导致字节序列。 为了在程序中使用这些字节,我必须将它们存储在向量中,然后才能遍历向量中的每个元素。

因此,缓冲区不是像矢量这样的实际数据类型,而是一种以更好/更易访问的格式临时存储数据以便可以使用的缓冲区。 这个定义正确吗? 我认为这没有什么区别,但是我使用的语言是C ++。

我认为您适合这种特殊情况,您正在使用临时存储将字节读取到内存中,然后将其重塑为程序所需的实际数据格式。

但是:在不同的上下文中,术语“缓冲区”用于许多事物。

例如,缓冲区可以是用于从文件读取到内存中的内存,这样,当源请求单个字符(或少量字节)时,运行时库就不必一直进入操作系统。内核请求一个或少量的字节,但将其开销分摊为一千字节或几千字节的数据。 这通常隐藏在C或C ++运行时中。

在C ++中, std::stream的内部实现使用std::streambuf来处理文件I / O的低级缓冲机制。

在其他情况下,这是系统忙于执行其他操作时存储按键的位置,直到应用程序有时间从键盘输入中读取内容。

同样,在屏幕上显示实际视频内容之前,还有一些缓冲区可以从互联网读取视频流。 因为如果视频播放器一次仅请求几个字节(如使用的那样),那么请求的开销将使回放非常不稳定。

另一个示例是使用OpenCL(或例如Cuda)处理GPU上的某些数据并想要一些内存来存储数据的应用程序,然后调用clCreateBuffer(..., size, ...)将返回一个用于存储size字节的内存对象。

在计算机中还有许多其他地方使用术语“缓冲区”。 (以及在计算机外部的区域,例如化学方面的化合物(一种能够抵抗或帮助限制pH值的化合物)和火车上的区域(在支架末端的“碰撞停止”))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM