【发布时间】:2016-12-06 09:39:23
【问题描述】:
一个对象尝试分配比允许的虚拟地址空间更多的内存(win32 上为 2Gb)。 std::bad_alloc 被捕获并释放对象。进程内存使用量下降,进程应该继续;但是,任何后续的内存分配都会因另一个std::bad_alloc 而失败。使用VMMap 检查内存使用情况表明堆内存似乎已被释放,但实际上它被标记为私有,没有剩余空间。唯一要做的似乎是退出并重新启动。我会理解碎片问题,但为什么释放后进程无法恢复内存?
对象是QList 中的QLists。该应用程序是多线程的。我可以制作一个小型复制器,但我只能复制一次问题,而大多数时候复制器可以再次使用已释放的内存。
Qt 是不是在偷偷摸摸?还是win32延迟发布?
【问题讨论】:
-
win32 从不“延迟”发布 - 如果您调用
VirtualFree(p, 0, MEM_RELEASE)- 函数返回时将释放内存(当然p是正确的) - 所以 100%VirtualFree不是调用或使用错误的参数调用 -
一个
QList的QLists 的什么?这才是最重要的。 -
属于
QVariant。它基本上是一个电子表格。它通常包含字符串或 URL 形式的数字。
标签: c++ qt winapi memory bad-alloc