采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
char buffer[8192]; fread(buffer, sizeof(buffer[0]),8192, serc_file);
char buffer[8192]; setvbuf(src_file, buffer, _IOFBF, 8192);
老师您好,请教您一个问题。在读字节的时候,以上两种方法均可设置缓存大小为8192个字节,效果是一样的吗?如果一样,为什么还要多此一举用这个setvbuf?谢谢。
不一样啊。你仔细再看看视频的讲解,setbuf 是设置缓冲区,读文件的时候会先读到这个缓冲区里面。fread传入的buffer实际上是从缓冲区里面读出来的。
老师,我可以这样理解吗? 在fread(buffer, sizeof(buffer[0]),8192, serc_file);这行代码之前可以写一下setvbuf(src_file, buffer, _IOFBF, 8192);这样会比没有写setbuf的读的性能更高,是吗?而且这两行代码里的buffer并不是同一块内存。
设置 setvbuf 即便不调用,系统也会有个默认的缓冲区。另外,缓冲区设置有注意事项,最好在文件打开之后立即设置,并且保持不变。 至于性能好不好,要看实际情况,一般来讲缓冲区适当的调大会有利于较大的文件的读写,但如果文件本身很小,缓冲区的作用不明显。
非常感谢!
登录后可查看更多问答,登录/注册
如果通向大牛的道路有捷径,那就是先学好C语言
1.6k 3
1.1k 4
1.3k 9
1.6k 1
842 2