gpt4 book ai didi

c++ - 为什么 C++ 中的缓冲很重要?

转载 作者:IT老高 更新时间:2023-10-28 22:01:32 26 4
gpt4 key购买 nike

我尝试打印 Hello World 200,000 次,但我花了很长时间,所以我不得不停下来。但是在我添加一个 char 数组作为缓冲区之后,只用了不到 10 秒。为什么?

添加缓冲区之前:

#include <iostream> 
using namespace std;

int main() {
int count = 0;
std::ios_base::sync_with_stdio(false);
for(int i = 1; i < 200000; i++)
{
cout << "Hello world!\n";
count++;
}
cout<<"Count:%d\n"<<count;
return 0;
}

这是在添加缓冲区之后:

#include <iostream> 
using namespace std;

int main() {
int count = 0;
std::ios_base::sync_with_stdio(false);
char buffer[1024];
cout.rdbuf()->pubsetbuf(buffer, 1024);
for(int i = 1; i < 200000; i++)
{
cout << "Hello world!\n";
count++;
}
cout<<"Count:%d\n"<<count;
return 0;
}

这让我想到了 Java。使用 BufferReader 读取文件有什么好处?

最佳答案

就文件操作而言,写入内存 (RAM) 总是比直接写入磁盘上的文件要快。

为了说明,让我们定义:

  • 对磁盘上文件的每次写入 IO 操作花费 1 毫秒
  • 通过网络对磁盘上的文件进行每次写入 IO 操作需要 5 毫秒
  • 对内存的每次写入 IO 操作花费 0.5 毫秒

假设我们必须将一些数据写入文件 100 次。

案例一:直接写入磁盘文件

100 times x 1 ms = 100 ms

案例2:通过网络直接写入磁盘上的文件

100 times x 5 ms = 500 ms

案例 3:在写入磁盘文件之前先在内存中缓冲

(100 times x 0.5 ms) + 1 ms = 51 ms

案例 4:在通过网络写入磁盘上的文件之前在内存中进行缓冲

(100 times x 0.5 ms) + 5 ms = 55 ms

结论

在内存中缓冲总是比直接操作快。但是,如果您的系统内存不足并且必须与页面文件交换,它会再次变慢。因此,您必须平衡内存和磁盘/网络之间的 IO 操作。

关于c++ - 为什么 C++ 中的缓冲很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com