我想知道静态内存分配和动态内存分配有什么区别?
你能用任何例子来解释这一点吗?
最佳答案
共有三种类型的分配——静态、自动和动态。
静态分配意味着,您的变量的内存在程序启动时分配。创建程序时大小是固定的。它适用于全局变量、文件范围变量和用 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);
关于c - 静态内存分配和动态内存分配的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8385322/