有3种变量.根据您管理内存的种类不同.
全局变量
它们位于程序的特殊部分.它们在程序启动时出现,在程序结束时消失.你无法做任何事情来回收全局变量占用的内存.
一些更复杂的常量也可能属于该类别.您的字符串文字“我不希望这个被清除,但完全消失”很可能会驻留在那里,无论您是否将其复制到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在堆上分配内存并免费释放它,例如
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
当变量必须比范围长得多时,通常使用堆,通常取决于一些更复杂的程序逻辑.