哪个fgetc比setbuf更有效?

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

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

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

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

[fgetc(FILE*):((推FILE*的值)+(返回存储在char中的值])+(包含文件char*指针)* SIZE + ...

setbuf(FILE*,char*):(将FILE*char*的值推入)+(mov charfilechar)+(而char!=-1获取下一个字符)+将char设置为0返回[C0 ]

哪个更有效?

c assembly dos x86-16
1个回答
0
投票

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

任何fgetc设置只能对性能有很大影响。要一次从缓冲流中读取单个字符,可以在文件被线程锁定时使用POSIX标准setbuf / flockfilefunlockfile

© www.soinside.com 2019 - 2024. All rights reserved.