繁体   English   中英

如何在C ++中删除变量

[英]How can I delete variables in C++

我想在我的程序中释放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. */

我不明白你为什么要这样做,并且在任何情况下你都不能删除或以其他方式删除命名变量,除非它们在概念上被编译器在超出范围时被你删除,并且实际上被删除了包含它们的函数退出。 例如:

{
   {
       string i_want_to_delete_this = "I don't want this cleared, but            
completely gone";
   }     // it's gone
}

有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

当变量必须比范围长得多时,通常使用堆,通常取决于一些更复杂的程序逻辑。

当执行离开函数或子语句时,将删除自动变量,即不使用mallocnew运算符的变量。

在函数外部声明的变量将保留在内存中,直到程序终止。

此外,我将专注于程序的正确性和稳健性。 如果程序不适合您的平台内存,则只担心RAM或内存使用情况。

在现实世界中,工作场所,由程序处理并且不适合存储器的大多数数据可以分成多个部分并且每个部分单独处理(尽管有一些例外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM