2012-06-09 54 views
6

我想知道是否可以删除,即从使用中删除一个C变量,例如,一旦变量被使用一次?程序运行期间,C变量是否可以随时删除或删除?

我前段时间就这个问题进行了反思,脑海中出现了一个问题。

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

int i;

一旦我们以这种方式创建的变量,我们如何“删除”它如果我们不需要它在未来的使用?

我在网上搜索,但没有找到任何C命令这样做。 'k被删除',我的意思是'k已经不存在'。我的意思是,一旦我们不需要变量,这是一种浪费,应该删除。

C确实提供了free()函数,但它只适用于使用calloc(), malloc()realloc()分配的内存。

那么一旦使用了变量,如何删除一个变量?

回答

13

你不知道。对象的寿命一旦超出范围就结束(它被称为自动对象,因为它会自动清理)。

例如

void foo() { 
    int j = 3; 

    while (blah) { 
     int i = 5; 
    } 

    // i no longer exists 
} 

// j no longer exists 
+0

谢谢,但是如果一个变量已经用完并仍在范围内呢?可以删除吗? –

+3

@NihalPednekar:不可以。但是您应该记住,编译器非常擅长优化堆栈使用情况;无论如何,你的大部分局部变量可能永远不会存在于主内存中! –

+0

我明白了。非常感谢 :) 。 –

5

在C中,有一个对象,这决定了其寿命的存储持续时间的概念:

  • 静态存储用于程序
  • 螺纹的整个执行生命存储直到线程终止
  • 自动存储个生活,直到周围的块留
  • 分配存储通过需要明确的去分配free()

分配的存储空间之外,语言运行时将采取回收内存的护理(如降低堆栈指针放弃呼叫框架,“释放”自动存储)。

+0

线程存储直到尚未被广泛采用的C11(AFAIK)才存在。 –

+0

通过语言扩展在C11之前存在线程(-local)存储,例如gcc中的'__thread'和MSVC中的'__declspec(thread)' – Christoph

相关问题