如何删除C++中的变量

How can I delete variables in C++

本文关键字:C++ 变量 删除 何删除      更新时间:2023-10-16

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

有三种类型的变量。根据你对记忆的管理方式不同。

全局变量

这些位于程序的一个特殊部分。它们在程序启动时出现,在程序结束时消失。您不能做任何事情来回收全局变量占用的内存。一些更复杂的常数也可能属于这一类。无论是否将字符串文本"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或内存使用情况。

在现实世界中,即工作场所,大多数由程序处理但不适合内存的数据可以被分割成多个部分,每个部分都单独处理(但也有一些例外)。