以下将一堆shared_ptr
个包含在QList中的任意对象。使用花括号,我创建一个堆栈,当指令指针离开它时触发列表的删除。不知何故
shared_ptr
已删除 。为什么?我在gnome-systemmonitor和htop中跟踪内存消耗。
{
QList<std::shared_ptr<QChar>> l;
for (int i =0; i< 1024*1024*10; ++i)
l.append(std::make_shared<QChar>('h'));
}
qDebug() <<"done";
sleep(10);
我刚试过它。与QSharedPointer相同的问题,但不是常规类型(非[共享]指针)。
答案 0 :(得分:2)
小内存分配来自进程内管理的堆,而不是直接来自操作系统。衡量流程内存使用情况的工具不会发现它们被解除分配,因为内存仍然分配给流程。
答案 1 :(得分:2)
释放内存并不一定会将其返回给系统。根据默认分配器如何从系统请求内存,可能可能将其返回。
如果要跟踪内存是否正确释放,请使用计数分配器,而不是系统监视工具。