while (!interrupted)
{
pxData data = queue->pop();
if (data.value == -1)
{
break; // exit loop on terminating condition
}
usleep(7000); // stub to simulate processing
}
我正在使用CentOS7中的System Monitor查看内存历史记录。我想要在从队列中读取值之后释放占用的内存,但是当以下while循环运行时,我没有看到内存使用量下降。我已经验证了队列长度确实下降了。
当遇到-1并退出循环时,内存使用量确实下降了。(程序仍在运行) 但是我不能这样做,因为我想要在usleep的位置做一些密集处理。
问题:为什么不会释放数据占用的内存?(根据System Monitor) 堆栈分配的内存不应该在变量超出范围时被释放吗?
结构体如下所示,并在程序开始时填充。
typedef struct pxData
{
float value; // -1 value terminates the loop
float x, y, z;
std::complex<float> valueData[65536];
} pxData;
这里有大约10000个pxData,大约相当于5GB的空间。系统只有大约8GB的内存。因此重要的是释放内存,以便系统可以进行其他处理。
usleep
仍在作用域中运行。 - MatthewRockpop.value
是什么? - John Zwinckstd::queue<float>
也会看到类似的情况。 - juanchopanza