可以在程序运行期间随时删除或删除C变量吗?

phi*_*ane 6 c free

我想知道是否有可能删除,即从使用中删除一个C变量,例如,一旦变量被使用一次?

我前段时间正在反思这个问题,我脑子里浮现出一个问题.

C有很多数据类型,我们可以用简单的代码创建一个数据类型的变量,比如整数

int i;

一旦我们以这种方式创建了变量,如果我们在将来使用中不需要它,我们如何"删除"它?

我在网上搜索,但没有找到任何执行此操作的C命令.通过"k被删除",我的意思是"k已经不复存在".我的意思是,一旦我们不需要变量,它就是一种浪费,应该被删除.

C确实提供了该free()功能,但它仅适用于使用calloc(), malloc()或分配的内存realloc().

那么int,一旦变量被使用,如何删除一个变量呢?

Oli*_*rth 15

你没有.一旦超出范围,对象的生命周期就会结束(它被称为自动对象,因为它会被自动清除).

例如

void foo() {
    int j = 3;

    while (blah) {
        int i = 5;
    }

    // i no longer exists
}

// j no longer exists
Run Code Online (Sandbox Code Playgroud)

  • @NihalPednekar:不.但你应该记住,编译器非常擅长优化堆栈使用; 无论如何,大多数局部变量可能永远不会存在于主存中! (3认同)

Chr*_*oph 5

在C中,有一个对象的存储持续时间的概念,它决定了它的生命周期:

  • 静态存储用于整个程序的执行
  • 线程存储一直持续到线程终止
  • 自动存储一直存在,直到剩下的周围块
  • 分配的存储需要通过显式解除分配free()

除了分配的存储,语言运行时将负责回收内存(例如,减少堆栈指针以丢弃调用帧,这'释放'自动存储).