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