我正在尝试使用C ++中的以下内容删除存储在RAM和缓存中的信息:
system("free");
system("sudo sh -c \"sync; echo 3 > /proc/sys/vm/drop_caches\"");
system("free");
但是我发现缓存没有被清除。我在哪里错了。实际上我的程序在RAM中占用了大量空间(通过创建队列等数据结构)。但是,在我的程序中的某一点上,我希望RAM是空闲的(即任何悬空指针或内存分配)应该被系统命令强制释放。虽然这在程序终止时自动发生。程序执行时是否可以这样做?
我正在使用linux操作系统
答案 0 :(得分:1)
不,那是不可能的。 /proc/sys/vm/drop_caches
仅释放由操作系统内核管理的缓存数据;它无法查看“进入”应用程序以确定其内存部分是不必要的。
如果您想在应用程序中释放内存,则需要通过释放未使用的内存来自行完成(例如,使用delete
或free()
)。
答案 1 :(得分:0)
如果您可以要求操作系统释放程序分配的所有内存,程序将立即崩溃。它使用了一些记忆,你知道吗?
也可以保存崩溃的部分,然后只需拨打_exit(1)