我想知道静态内存分配和动态内存分配之间有什么区别?
你能用任何例子解释一下吗?
有三种类型的分配--静态、自动和动态。
静态分配意味着,你的变量的内存是在程序开始时分配的。 当程序被创建时,其大小是固定的。 它适用于全局变量、文件范围变量和在函数中定义的以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);