as3*_*unt 2 c garbage-collection memory-leaks memory-management
我主要是一个Java人员,最近正在处理一些涉及C的项目,所以如果这是一个基本的C问题,请耐心等待.
所以在我的主要内部我有一个while循环,我每次迭代都声明一个变量.
int main()
{
int done = 0;
while(!done)
{
char input[1024];
scanf("%s", input);
//parse the input string
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在因为输入变量每次都会改变,这取决于用户想要什么,我每次都必须使用"新"变量.但是,我认为上述声明最终会导致内存泄漏(或者会吗?).我想知道gcc是否负责垃圾收集.
在每次迭代后没有分配和释放有没有更好的方法?
我认为上述声明最终会导致内存泄漏(或者会是什么?).
不,它不会:input是一个自动(AKA"堆栈")变量,一旦它超出范围(即在结束括号后),它将被"解除分配".
在每次迭代后没有分配和释放有没有更好的方法?
没有实际的分配或释放:自动存储器中的空间(堆栈中的AKA)由堆栈指针周围的一些编译时簿记分配.自动变量的访问是一个非常快速的操作,在很大程度上由硬件辅助,因此不会有效率损失.
动态内存分配(Java风格)与做malloc/ calloc/ realloc在C.这些都不是垃圾收集-你需要明确free每一个你分配的指针.