请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

setvbuf

char buffer[8192];
fread(buffer, sizeof(buffer[0]),8192, serc_file);
char buffer[8192];
setvbuf(src_file, buffer, _IOFBF, 8192);

老师您好,请教您一个问题。在读字节的时候,以上两种方法均可设置缓存大小为8192个字节,效果是一样的吗?如果一样,为什么还要多此一举用这个setvbuf?谢谢。

正在回答

1回答

不一样啊。你仔细再看看视频的讲解,setbuf 是设置缓冲区,读文件的时候会先读到这个缓冲区里面。fread传入的buffer实际上是从缓冲区里面读出来的。

0 回复 有任何疑惑可以回复我~
  • 提问者 prosmail #1
    老师,我可以这样理解吗?
    在fread(buffer, sizeof(buffer[0]),8192, serc_file);这行代码之前可以写一下setvbuf(src_file, buffer, _IOFBF, 8192);这样会比没有写setbuf的读的性能更高,是吗?而且这两行代码里的buffer并不是同一块内存。
    回复 有任何疑惑可以回复我~ 2021-01-20 14:01:39
  • bennyhuo 回复 提问者 prosmail #2
    设置 setvbuf 即便不调用,系统也会有个默认的缓冲区。另外,缓冲区设置有注意事项,最好在文件打开之后立即设置,并且保持不变。
    至于性能好不好,要看实际情况,一般来讲缓冲区适当的调大会有利于较大的文件的读写,但如果文件本身很小,缓冲区的作用不明显。
    回复 有任何疑惑可以回复我~ 2021-01-20 14:50:20
  • 提问者 prosmail #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-01-20 17:31:13

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信