我创建了一个示例应用程序,如下所示。我需要创建 1024*1024 结构。在调用 new
运算符之前,我的应用程序消耗了一些内存(比如 0.3mb)。调用 new 运算符后,内存增加(比如 175mb)。在调用 delete
运算符后,内存减少了(比如 15mb)。所以最后在内存中出现了差异。我从任务管理器中观察了所有这些内存详细信息。我很困惑是否应该将其视为内存泄漏,或者内存会慢慢释放吗?如果没有,我怎样才能释放剩余的内存?
struct testSt
{
bool check;
std::string testString;
};
int main()
{
testSt *testObj = new testSt[1024 * 1024];
delete[] testObj;
return 0;
}
最佳答案
您的应用程序中肯定没有内存泄漏。分配前后的数字似乎不匹配的原因是任务管理器工具在检测 C++ 程序中的内存泄漏时过于粗略。它不仅记录代码的内存使用情况,还记录执行代码的进程的所有内存使用情况,包括支持代码操作的标准 C++ 库使用的任何内存。
使用内存分析器,例如 valgrind , 以测试您的代码是否存在内存泄漏。
此外,考虑在制作容器时放弃使用原始指针。迄今为止,减少内存泄漏可能性的最佳方法是使用标准 C++ 库中的容器自动进行内存管理。在你的例子中,定义一个 vector
std::vector<testSt> testObj(1024*1024);
会让你完全避免分配和释放。
关于c++ - 新建然后删除后的内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49651149/