哪个fgetc比fread更有效?

问题描述 投票:-1回答:1

我想将一个文件的内容复制到另一个文件。

[起初我以为fgetc()会比fread()更好,因为该程序无需为了复制每个字符而重复通过​​缓冲区。

但是我很快意识到,重复使用fgetc()等效于执行多个函数(堆栈指针),这样,如果文件很大,它将使过程更加耗时。

哪个更有效?

c assembly dos x86-16
1个回答
2
投票
fgetc的问题是现代C实现支持

threads。 FILE可以由多个线程共享,这就是为什么访问缓冲区需要显式锁定的原因。虽然您可以使用setbuf来扩大缓冲区,但并不能消除锁定的必要。因此,fread调用几乎总是比多个fgetc调用性能更高。

任何setbuf设置只能对性能有很大影响。要一次从缓冲流中读取单个字符,可以在文件被线程锁定时使用POSIX标准flockfile / funlockfilegetc_unlocked
© www.soinside.com 2019 - 2024. All rights reserved.