[英] Difference between static memory allocation and dynamic memory allocation
想知道静电内存分配和动态内存分配有什么区别?
你能举个例子来解释一下吗?
想知道静电内存分配和动态内存分配有什么区别?
你能举个例子来解释一下吗?
分配有三种类型:静态、自动和动态.
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);
使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告
浮点文字中有效十进制数字的最小数量是多少,以尽可能正确地表示该值?
将所有位从最低有效位翻转到最高有效最后 1 位值的最有效方法是什么?
GNU inline asm:允许不同输出操作数的相同寄存器?
套接字编程中shutdown()函数中SHUT_RDWR的用途
((void (*)())buf)(); 是什么意思?意思是?
这段代码如何在不使用 sizeof() 的情况下确定数组大小?
为什么 (A+B) 的 FFT 与 FFT(A) + FFT(B) 不同?
使用无符号而不是有符号的 int 是否更有可能导致错误?为什么?