我注意到在我的printf
for C
的实现中,一个1024字节的缓冲区被分配并用于所有后续调用,而不是显式释放(引用的理由是Linux内核将在程序终止时这样做)。
我读过关于缓冲I/O的文章;不过,我不太明白为何要重复使用这个缓冲区,而不是为每次调用分配一个所需大小的缓冲区。我考虑过以下原因:
- 减少系统调用次数
malloc
可能需要不确定的时间量或具有可变的结果- 所需空间量可能不可用(在我的系统上不太可能)
我不太明白动机。有人能提供一个明确的理由吗?显然这只是猜测,除非为printf
编写源代码的人看到这个问题。
1条答案
按热度按时间mklgxw1f1#
我将您的问题广义地解释为“重用内存缓冲区的好处是什么”,而不是在每次使用内存时执行动态内存分配。这样做有两个很好的技术原因:
如果你想知道printf这样做的具体原因和考虑的具体权衡,我建议给作者发电子邮件。