gpt4 book ai didi

c++ - 删除和内存管理

转载 作者:行者123 更新时间:2023-11-28 00:13:17 25 4
gpt4 key购买 nike

我发现运行以下(示例)代码的内存管理有意想不到的结果:

#include <stdint.h>
#include <iostream>
#include <vector>

#define BIGNUM 100000000

// sample struct
struct Coordinate {
uint64_t x;
uint64_t y;
uint64_t z;
Coordinate() {
x = 1ULL;
y = 2ULL;
z = 3ULL;
}
};

int main() {
std::vector<Coordinate*>* coordinates = new std::vector<Coordinate*>();

for (int i = 0; i < BIGNUM; ++i)
coordinates->push_back(new Coordinate());

// block 1
for(std::vector<Coordinate*>::iterator it = coordinates->begin(); it != coordinates->end(); ++it)
delete(*it);

// block 2
delete(coordinates);

std::cout << "end\n";
std::cin.get();

return 0;
}

在我的 Ubuntu 14.04 上:

enter image description here

ps aux --sort -rss 命令在 std::cin.get(); 上执行了 4 次,但有细微差别:

1) 程序原样

2) 对 block 1 进行了注释(基本上没有删除每个 vector 的元素)

3) 对 block 2 进行了注释(因此不删除 vector)

4) block 1 和 block 2 都进行了评论。

我的(大)惊喜测试 1) 和 2) 有几乎相同的 RSS/VSZ 结果。简单来说,delete(*it); 似乎不能正常工作(不释放内存)。 3)和4)也可以得出同样的结论。

在 Windows XP 上(在 VirtualBox 中运行)一切正常,内存为 0-2 MB,按原样运行程序。

最佳答案

仅仅因为delete 释放内存并不意味着内存会立即释放回操作系统以供一般使用。现代操作系统上的内存管理是 just not that simple .

除了您的假设,这里没有任何问题!

关于c++ - 删除和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31905386/

25 4 0
文章推荐: javascript - Ajax 禁用弹出菜单插件
文章推荐: html - 如何将 html 组件放在由
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com