内存分配一般有三种。
第一是静态内存分配,在编写程序时,使用 static 修饰符声明某变量为静态变量,并且应该为其赋缺省值;
静态内存的分配在编译时便已确定下来,而且是编译器自动分配。
除了寄存器(现在几乎不用)及静态声明外,其余的局部变量(全局变量是静态声明的)默认为动态(auto)声明。
第二种是栈内存的分配,C语言调用函数时(C是函数式的语言)为当前的函数调用分配栈内存,维护当前的函数调用的局部变量(参数属于局部变量的一个范畴),这也是编译器为程序赋予的一个功能,我们无须手动干预。
第三种是堆内存,由我们在需要时手动分配(使用 malloc() 函数),并且必须手动释放(使用 free() 函数)。堆内存的生命周期不随函数作用域等限制,并且即使整个程序已退出执行,因为这块内存受管理于操作系统。所以,必须在该内存不再使用时使用 free() 释放这块空间。
[此贴子已经被作者于2006-11-21 13:45:23编辑过]