我到处都能看到“BUFFER”这个词,但我不明白它到底是什么。
有人能用通俗的语言解释一下什么是缓冲区吗? 什么时候使用? 它是如何使用的?
我到处都能看到“BUFFER”这个词,但我不明白它到底是什么。
有人能用通俗的语言解释一下什么是缓冲区吗? 什么时候使用? 它是如何使用的?
当前回答
Buffer的意思是“临时存储”。缓冲区在计算中很重要,因为相互连接的设备和系统很少彼此“同步”,所以当信息从一个系统发送到另一个系统时,它有一个地方等待,直到接收系统准备好。
其他回答
术语“缓冲区”是一个非常通用的术语,并不是特定于IT或CS的。它是一个临时存储东西的地方,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续在缓冲区中存储输出。当使用者找到它时,它可以从缓冲区中读取。缓冲器在中间,用来弥补缺口。
如果你把http://en.wiktionary.org/wiki/buffer上的定义平均一下,我想你就会明白了。
为了证明我们真的“每天必须冒着雪走10英里去上学”,请参阅top -10监视器调用手册第1卷第11.9节,“使用缓冲I/O”,在书签11-24。如果你经常做噩梦,就不要阅读。
想象一下,你正在吃碗里的糖果。你定期吃一片。为了防止碗里的糖用光,有人可能会在碗里的糖变空之前把它装满,这样当你想再吃一块的时候,碗里就有糖了。
碗在你和糖果袋之间起到缓冲作用。
如果你在网上看电影,网络服务会不断地将接下来的5分钟左右下载到缓冲区,这样你的电脑就不必在你看电影的时候下载电影(这会导致挂机)。
缓冲区是内存(ram/磁盘)中的临时占位符(许多编程语言中的变量),可以在其上转储数据,然后进行处理。
缓冲有很多优点,比如它允许事情并行发生,提高IO性能等。
如果使用不当,它也有很多缺点,如缓冲区溢出、缓冲区下溢等。
字符缓冲区示例。
char *buffer1 = calloc(5, sizeof(char));
char *buffer2 = calloc(15, sizeof(char));
实际上,在每种情况下,它都取决于上下文,因为没有一个定义-但一般来说,缓冲区是暂时存放东西的地方。我能想到的最好的现实类比是等待区。计算中的一个简单例子是,缓冲区指的是RAM中用于临时存储数据的一部分。
缓冲区就是用来保存数据的一块内存。在最一般的意义上,它通常是在一个操作中装入的单个内存块,然后在一个或多个操作中清空,这就是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)读取的数据,直到写入;然后重新使用缓冲区。
还有更复杂的缓冲区方案,例如循环缓冲区,一个接一个地使用有限数量的缓冲区;一旦缓冲区都满了,索引就会“换行”,以便重用第一个索引。