对于 C 中的动态内存分配,您必须先释放(或释放)保留的内存,然后才能执行和编译程序。例如:
....
... = malloc(...)
...
free(...)
return 0;
但是如果我不使用动态内存分配它是如何工作的。例如,如果我使用 保留 40000000 字节的空间int array [10000000]
,我以后不需要时如何在程序中释放内存?
对于 C 中的动态内存分配,您必须先释放(或释放)保留的内存,然后才能执行和编译程序。例如:
....
... = malloc(...)
...
free(...)
return 0;
但是如果我不使用动态内存分配它是如何工作的。例如,如果我使用 保留 40000000 字节的空间int array [10000000]
,我以后不需要时如何在程序中释放内存?
在 C 中分配内存有不同的方法。
if
语句、循环或其他),并在退出块时释放。static
局部变量) - 在程序开始时自动分配,并在结束时自动释放。malloc
和释放free
.顺便说一句,您不必在退出程序之前释放所有内容。操作系统将在退出时释放属于您的程序的所有内存。(否则您必须更频繁地重新启动计算机)
如果它被称为动态内存是有原因的:它可以在需要时动态分配/释放。
如果动态内存的对立面是……这不是动态的,那也是有原因的:像你提到的那样的静态数组不能被释放。
您需要的是变量生命周期的概念:
int array [10000000]
是全局变量,它的生命周期就是程序的整个生命周期int array [10000000]
在花括号括起来的块内{ }
,它会存储在堆栈中,一旦执行退出块,它的生命就结束了static
关键字 ( static int array [10000000];
) 声明变量,则它的生命周期是整个程序的生命周期,尽管它的范围仅限于块对于 C 中的动态内存分配,您必须先释放(或释放)保留的内存,然后才能执行和编译程序。
那是……困惑。动态内存只存在于运行时——它与编译或执行程序无关。当你在运行的程序中free
不再需要它时,你会记住它。
至于没有*alloc
使用...分配的东西
如果您在函数体中定义并且int array[10000000];
没有关键字static
,则array
具有自动存储持续时间;进入函数时为它保留内存,退出时释放1, 2。如果您在文件范围内、在任何函数的主体之外定义数组,或者如果您使用static
关键字声明它,则array
具有静态存储持续时间,并且程序启动时将为它保留内存并在程序退出时释放内存。
for
循环体中定义数组,则仅保证在该循环期间内存可用。然而,实际上,大多数编译器会在函数入口处为所有局部变量分配空间,并在函数退出时释放它。