我编写了一个小型 C++ 程序,将一个 2.7KB 的 png 文件复制 100 万次。复制之前我的内存情况如下:
我等了几分钟,复制程序关闭后,也许内存使用量会下降,但只下降了500MB。
如果我再运行几次复制程序,那么 RAM 使用率就会更高,但不会超过这个点:
这是怎么回事?为什么复制程序退出后内存使用率这么高?
以下是复制程序代码:
//called with loopSize=1'000'000
void TestFileCopy(const string& sourcePath, const string& destFolder, int loopSize)
{
int counter = 0;
while (counter < loopSize)
{
std::ifstream source(sourcePath, std::ios::binary);
if (source.fail())
throw std::runtime_error("File not found: " + sourcePath);
string destPath = destFolder + std::to_string(counter) + ".png";
std::ofstream dest(destPath, std::ios::binary);
dest << source.rdbuf();
source.close();
dest.close();
if (source.fail())
throw std::runtime_error("Error reading file: " + sourcePath);
if (dest.fail())
throw std::runtime_error("Error writing file: " + destPath);
++counter;
}
}
答案1
我认为这是因为文件被操作系统缓存了。一旦删除文件,缓存就不再需要了。内存可以恢复。