分配有三种类型:静态、自动和动态.
Static Allocation意味着,变量的内存是在程序启动时分配的.创建程序时,大小是固定的.它适用于全局变量、文件范围变量以及在函数内部定义的限定为static
的变量.
Automatic memory allocation用于函数内部定义的(非静态)变量,通常存储在stack上(尽管C标准不要求使用堆栈).您不必使用它们来保留额外的内存,但另一方面,对该内存的生命周期的控制也有限.函数中的自动变量只在函数完成之前存在.
void func() {
int i; /* `i` only exists during `func` */
}
Dynamic memory allocation有点不同.现在,您可以控制这些内存位置的确切大小和使用生命周期 .如果您不释放它,您将遇到内存泄漏,这可能会导致应用程序崩溃,因为在某个时间点,系统无法分配更多内存.
int* func() {
int* mem = malloc(1024);
return mem;
}
int* mem = func(); /* still accessible */
在上例中,即使函数终止,分配的内存仍然有效且可访问.当你用完内存后,你必须释放它:
free(mem);