当文件存在于ext3文件系统或FAT32文件系统上时,我注意到truncate()
和ftruncate()
函数调用存在很大的性能差异。
该文件约为50 MiB。要从该文件中删除大约100字节的数据,我使用
ftruncate(file, fsize - num_bytes)
它工作正常,但在FAT32文件系统上运行时性能更差:
truncate on ext3 Time needed: 0.000030s
truncate on FAT32 Time needed: 3.877204s
我已多次运行测试,结果总是相似。有时FAT结果甚至更差(~7s)。
我的问题是: FAT32对文件做了什么,需要这么长时间?
我的第一个假设是,它必须重写整个文件,但即使是该文件的生成/初始化也不需要这么长时间(~1.5s)。
我在64位Linux系统上运行它并使用以下代码编译:
$ gcc -std=c99 -O0 -g3 -pg -pedantic -Wall