我想在我的程序中释放ram。
即使我是新手,我也非常关心表现。
string i_want_to_delete_this = "I don't want this cleared, but
completely gone";
/* I figured out */ i_want_to_delete_this.clear() /* simply sets the
string value to "". I want to be able to do this with every
datatype! I want it completely gone, not even declared anymore. */
答案 0 :(得分:7)
我不明白你为什么要这样做,并且在任何情况下都不能删除或以其他方式删除命名变量,除非它们在超出范围时被编译器概念性地删除了,并且实际上当包含它们的函数退出时删除。例如:
<item name="android:windowTranslucentStatus">true</item>
答案 1 :(得分:4)
有3种变量。根据您管理内存的种类不同。
全局变量
这些属于您程序的特殊部分。它们在程序启动时出现,在程序结束时消失。你无法做任何事情来回收全局变量占用的内存。
一些更复杂的常量也可能属于该类别。您的字符串文字"I don't want this cleared, but completely gone"
很可能会驻留在那里,无论您是否将其复制到i_want_to_delete_this
变量。
堆叠变量
局部变量和函数参数。它们出现在您的代码中。输入该变量的范围时会分配内存,并在离开范围时自动删除:
{ //beginning of the scope
int foo = 42; // sizeof(int) bytes allocated for foo
...
} //end of the scope. sizeof(int) bytes relaimed and may be used for other local variables
请注意,当启用优化时,可能会将局部变量提升为寄存器,并且根本不会占用RAM内存。
堆变量
堆是你自己管理的唯一一种记忆。在普通的C中,您使用malloc
在堆上分配内存,并将其与free
一起释放,例如
int* foo = (int*)malloc(sizeof(int)); //allocate sizeof(int) bytes on the heap
...
free(foo); //reclaim the memory
请注意,foo
本身是一个局部变量,但指向堆内存的一部分,您可以在其中存储整数。
同样认为C ++看起来像:
int* foo = new (int; //allocate sizeof(int) bytes on the heap
...
delete foo; //reclaim the memory
当变量必须存在的时间比范围长得多时,通常会使用堆,通常取决于一些更复杂的程序逻辑。
答案 2 :(得分:0)
当执行离开函数或子语句时,将删除自动变量,即未使用malloc
或new
运算符的变量。
在函数外部声明的变量将保留在内存中,直到程序终止。
另外,我会关注程序的正确性和稳健性。如果程序不适合您的平台内存,则只担心RAM或内存使用情况。
在现实世界中,工作场所,由程序处理并且不适合存储器的大多数数据可以分成多个部分,每个部分单独处理(尽管有一些例外)。