我到处都能看到“BUFFER”这个词,但我不明白它到底是什么。

有人能用通俗的语言解释一下什么是缓冲区吗? 什么时候使用? 它是如何使用的?


当前回答

缓冲区就是用来保存数据的一块内存。在最一般的意义上,它通常是在一个操作中装入的单个内存块,然后在一个或多个操作中清空,这就是Perchik的“糖果碗”示例。例如,在C程序中,你可能有:

#define BUFSIZE 1024
char buffer[BUFSIZE];
size_t len = 0;

// ... later
while((len=read(STDIN, &buffer, BUFSIZE)) > 0)
    write(STDOUT, buffer, len);

... 它是cp(1)的最小值。这里,缓冲区数组用于存储read(2)读取的数据,直到写入;然后重新使用缓冲区。

还有更复杂的缓冲区方案,例如循环缓冲区,一个接一个地使用有限数量的缓冲区;一旦缓冲区都满了,索引就会“换行”,以便重用第一个索引。

其他回答

想象一下,你正在吃碗里的糖果。你定期吃一片。为了防止碗里的糖用光,有人可能会在碗里的糖变空之前把它装满,这样当你想再吃一块的时候,碗里就有糖了。

碗在你和糖果袋之间起到缓冲作用。

如果你在网上看电影,网络服务会不断地将接下来的5分钟左右下载到缓冲区,这样你的电脑就不必在你看电影的时候下载电影(这会导致挂机)。

实际上,在每种情况下,它都取决于上下文,因为没有一个定义-但一般来说,缓冲区是暂时存放东西的地方。我能想到的最好的现实类比是等待区。计算中的一个简单例子是,缓冲区指的是RAM中用于临时存储数据的一部分。

缓冲区是内存(ram/磁盘)中的临时占位符(许多编程语言中的变量),可以在其上转储数据,然后进行处理。

缓冲有很多优点,比如它允许事情并行发生,提高IO性能等。

如果使用不当,它也有很多缺点,如缓冲区溢出、缓冲区下溢等。

字符缓冲区示例。

char *buffer1 = calloc(5, sizeof(char));

char *buffer2 = calloc(15, sizeof(char));

缓冲区就是用来保存数据的一块内存。在最一般的意义上,它通常是在一个操作中装入的单个内存块,然后在一个或多个操作中清空,这就是Perchik的“糖果碗”示例。例如,在C程序中,你可能有:

#define BUFSIZE 1024
char buffer[BUFSIZE];
size_t len = 0;

// ... later
while((len=read(STDIN, &buffer, BUFSIZE)) > 0)
    write(STDOUT, buffer, len);

... 它是cp(1)的最小值。这里,缓冲区数组用于存储read(2)读取的数据,直到写入;然后重新使用缓冲区。

还有更复杂的缓冲区方案,例如循环缓冲区,一个接一个地使用有限数量的缓冲区;一旦缓冲区都满了,索引就会“换行”,以便重用第一个索引。

缓冲区是内存(ram/磁盘)中的临时占位符(许多编程语言中的变量),可以在其上转储数据,然后进行处理。

术语“缓冲区”是一个非常通用的术语,并不是特定于IT或CS的。它是一个临时存储东西的地方,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续在缓冲区中存储输出。当使用者加速时,它可以从缓冲区读取。缓冲器在中间,用来弥补缺口。