c++ - 新建然后删除后的内存消耗

标签 c++ windows memory memory-leaks

我创建了一个示例应用程序,如下所示。我需要创建 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/

相关文章:

c - C 中结构的大小

c++ - WChars、编码、标准和可移植性

c++ - 为什么 valgrind 显示泄漏,即使包含动态分配对象的 vector 已被释放?

c++ - 知道基类指针指向哪个派生类

windows - 有没有办法改变非客户区的 Windows Aero 颜色?

windows - Wix - 仅在升级时运行自定义操作,而在修复/重新安装时不运行补丁

windows - 获取 HID 设备的功能报告描述符的 native 方法?

ios - 在 Swift 中替换数组值后会发生什么?

iphone - 下载图像时出现内存警告和应用程序崩溃

c++ - lambda 表达式语法错误