gpt4 book ai didi

c++ - 存储正常(即非动态分配)数据的非动态创建的 std::vectors 的内存释放问题

转载 作者:行者123 更新时间:2023-11-30 04:32:35 26 4
gpt4 key购买 nike

考虑以下代码,使用 g++ problem.cpp -o problem 编译:

#include <vector>

using namespace std;

int main()
{
while(1){}
return 0;
}

执行此代码时,命令 top 报告正在消耗约 80K 的内存。

现在考虑这段代码:

#include <vector>

using namespace std;

int main()
{
vector<int> testVec;
for(int i = 0;i<100000000;i++)testVec.push_back(i);
while(1){}
return 0;
}

正如预期的那样,top 报告消耗了大约 300MB 的内存。

现在最后,考虑这段代码:

#include <vector>

using namespace std;

int main()
{
vector<int> testVec;
for(int i = 0;i<100000000;i++)testVec.push_back(i);
testVec.clear();
vector<int>().swap(testVec);
while(1){}
return 0;
}

现在 top 报告消耗了 ~4196K(!)——为什么不像第一个示例那样只有 ~80K?我怎样才能最终释放可能被 vector 消耗的最后一点内存?我读过,除了 .clear() 之外,“交换技巧”旨在释放所有内容,但显然它没有像我预期的那样工作。我错过了什么?

最佳答案

您可能应该忽略它。 swap 技巧从 vector 中释放内存,但这并不意味着分配器(甚至 malloc 或下面的等效实现)会将内存返回给系统.也就是说, vector 很可能不是支撑内存的 vector 。

关于c++ - 存储正常(即非动态分配)数据的非动态创建的 std::vectors 的内存释放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7581350/

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