在C ++中强制释放内存

时间:2014-11-03 02:07:02

标签: c++ linux ubuntu-12.04

我正在尝试使用C ++中的以下内容删除存储在RAM和缓存中的信息:

   system("free");
   system("sudo sh -c \"sync; echo 3 > /proc/sys/vm/drop_caches\"");
   system("free");           

但是我发现缓存没有被清除。我在哪里错了。实际上我的程序在RAM中占用了大量空间(通过创建队列等数据结构)。但是,在我的程序中的某一点上,我希望RAM是空闲的(即任何悬空指针或内存分配)应该被系统命令强制释放。虽然这在程序终止时自动发生。程序执行时是否可以这样做?

我正在使用linux操作系统

2 个答案:

答案 0 :(得分:1)

不,那是不可能的。 /proc/sys/vm/drop_caches仅释放由操作系统内核管理的缓存数据;它无法查看“进入”应用程序以确定其内存部分是不必要的。

如果您想在应用程序中释放内存,则需要通过释放未使用的内存来自行完成(例如,使用deletefree())。

答案 1 :(得分:0)

如果您可以要求操作系统释放程序分配的所有内存,程序将立即崩溃。它使用了一些记忆,你知道吗?

也可以保存崩溃的部分,然后只需拨打_exit(1)