为什么read比 慢getc?
例如,这个:
for (;;) {
chr++;
amr=read(file1, &wc1, 1);
amr2=read(file2, &wc2, 1);
if (wc1 == wc2) {
if (wc1 == '\n')
line++;
if (amr == 0) {
if (eflg)
return (1);
return (0);
}
continue;
}
Run Code Online (Sandbox Code Playgroud)
比这慢:
for (;;) {
chr++;
c1 = getc(file1);
c2 = getc(file2);
if (c1 == c2) {
if (c1 == '\n')
line++;
if (c1 == EOF) {
if (eflg)
return (1);
return (0);
}
continue;
}
Run Code Online (Sandbox Code Playgroud)
getc使用read系统调用,为什么它更慢?
Kot*_*tte 11
因为 getc() 在返回之前缓冲读取的数据,所以调用getc()不一定会导致调用read()。read()是一个系统调用,它比普通的函数调用需要更长的时间来完成,因为内核有更多的操作要做。当您进入内核空间时,它会更改您的堆栈,保存所有上下文,处理要屏蔽的中断,而在另一端,当它完成时,它恢复上下文,中断,将您的用户空间堆栈放回.. . 这就是为什么 getc() 是首选的原因,因为如果您已经有可用的缓冲数据,它可以为您节省重要的开销。
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |