我注意到在我为C
实现printf
时。一个1024字节的缓冲区被分配并用于所有后续调用,而不是显式释放(引用的理由是Linux内核将在程序终止时这样做)。
我读过关于缓冲I/O;然而,我不太明白为什么要重用这个缓冲区,而不是为每个调用分配必要大小的缓冲区。我考虑了以下原因:
- 减少系统调用次数
malloc
可能需要不确定的时间或有可变的结果- 所需的空间量可能不可用(在我的系统上不太可能)
我不太明白这动机。谁能给出一个明确的理由?显然,这只是猜测,除非为printf
编写源代码的人看到了这个问题。
我将您的问题大致解释为"重用内存缓冲区的好处是什么?"而不是每次使用内存时执行动态内存分配。这样做有两个很好的技术原因:
- 如果内存分配器确实需要从系统请求更多内存,那么内存分配可能是一个昂贵的操作(与纯计算相比)。 重用相同的内存可以提高CPU缓存性能,因为内存已经被缓存的可能性更大。
如果您想知道printf这样做的具体原因以及所考虑的具体权衡,我建议您给作者发电子邮件。