ubuntu18.04
gcc7.5
同样的代码在vs2019下可以正常回收内存
{
queue<string> tmp;
quemsg.swap(tmp);
}
swap后,tmp的生命周期结束了,内存依然不下降
我看别人说gcc都不需要swap,pop后就能自动释放内存,vc++才需要swap,为啥我这会这样呢?求大佬赐教啊
ubuntu18.04
gcc7.5
同样的代码在vs2019下可以正常回收内存
{
queue<string> tmp;
quemsg.swap(tmp);
}
swap后,tmp的生命周期结束了,内存依然不下降
我看别人说gcc都不需要swap,pop后就能自动释放内存,vc++才需要swap,为啥我这会这样呢?求大佬赐教啊
参考GPT和自己的思路:
对于这个问题,可能需要深入了解 queue 的内存管理机制。在 gcc 9 中,在 queue 中使用 swap() 理论上应该会释放队列中元素占用的内存空间。但实际上,这种机制可能存在一些异常,导致内存并没有得到及时释放。解决这个问题的方法可以尝试增加代码中的析构函数,手动释放元素占用的内存空间。另外,是否使用 swap() 释放内存可能取决于编译器版本、编译器设置等多种因素。这里可以尝试更换不同版本的编译器,或者调整编译器参数,以便提高程序的内存管理效率和性能。