linux文件缓冲大小,python – Linux上文件的默认缓冲区大小

由于您链接到2.7文档,我假设您正在使用2.7. (在Python 3.x中,这一切都变得简单得多,因为在Python级别中暴露了更多的缓冲区.)

所有打开实际上(在POSIX系统上)是调用fopen,然后,如果你已经通过任何缓冲,setvbuf.由于您没有传递任何内容,您最终只能使用fopen的默认缓冲区,这取决于您的C标准库. (参见the source的详细信息,没有缓冲,它将-1传递给PyFile_SetBufSize,除非bufsize> = 0,否则不执行任何操作)

如果你阅读了glibc setvbuf manpage,它解释说如果你从不调用任何缓冲功能:

Normally all files are block buffered. When the first I/O operation occurs on a file, malloc(3) is called, and a buffer is obtained.

请注意,它不说什么大小的缓冲区获得.这是故意的这意味着实现可以是智能的,并且针对不同的情况选择不同的缓冲区大小. (有一个BUFSIZ常量,但这仅用于调用诸如setbuf之类的遗留功能时,不能保证在其他情况下使用.)

那么,会发生什么呢?那么,如果你看glibc的源码,最终它调用宏_IO_DOALLOCATE,它可以被钩住(或者被覆盖,因为glibc统一C streambuf和C stdio缓冲),但是最终它分配一个buf的_IO_BUFSIZE,这是一个别名针对平台专用的宏_G_BUFSIZE,即8192.

当然,你可能想要跟踪你自己的系统上的宏,而不是信任通用源.

你可能会想知道为什么没有很好的文件记录的方式来获取这些信息.大概是因为你不应该在乎.如果需要特定的缓冲区大小,可以手动设置一个缓冲区大小如果你信任系统最好的,只要信任它.除非你真的在内核或libc上工作,谁在乎?理论上说,这也使得系统可以在这里做一些聪明的事情,比如选择基于文件文件系统的块大小的bufsize,甚至基于运行的统计数据,尽管它看起来不像linux / glibc ,FreeBSD或OS X除了使用常量之外还要做任何事情.很可能是因为对大多数应用程序来说无关紧要. (您可能想要自己测试一下 – 在一些缓冲I / O绑定脚本上使用显示缓冲区大小,范围从1KB到2MB,并查看性能差异.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值