Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中强制释放内存+;_C++_Linux_Ubuntu 12.04 - Fatal编程技术网

C++ 在C+中强制释放内存+;

C++ 在C+中强制释放内存+;,c++,linux,ubuntu-12.04,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是空闲的(即任何悬空指针或内存分配),应该

我试图使用C++中的以下命令删除存储在RAM和缓存中的信息:

   system("free");
   system("sudo sh -c \"sync; echo 3 > /proc/sys/vm/drop_caches\"");
   system("free");           
但是我发现缓存没有被清除。我哪里出了问题。实际上,我的程序在RAM中占用了很多空间(通过创建队列等数据结构)。然而,在我的程序中的某一点上,我希望RAM是空闲的(即任何悬空指针或内存分配),应该通过系统命令强制释放。虽然这会在程序终止时自动发生。当程序正在执行时,是否可以执行相同的操作


我正在linux操作系统上工作

不,那是不可能的
/proc/sys/vm/drop_缓存
仅释放由操作系统内核管理的缓存数据;它不能“检查”应用程序以确定它们的部分内存是不需要的


如果要释放应用程序中的内存,您需要释放未使用的内存(例如,使用
delete
free()
)。

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


还不如保存崩溃部分,只需调用
\u exit(1)

在程序运行时,操作系统如何知道哪些分配处于挂起状态?您应该明确了解哪些变量在某个时候是无用的,并对其使用delete命令,这样内存就可以重新分配了。我想你需要看看你的数据结构(它们有效吗?)和内存泄漏。听起来你要找的是一个垃圾收集器。这些在C++中没有被广泛使用,但它们确实存在。不过,您最好还是使用智能指针,或者在适当的情况下使用智能指针。