一个C程序占用的内存可分为以下几类:
(一) 栈 这是由编译器自动分配和释放的区域。主要存储函数的参数,函数的局部变量等。当一个函数开始执行时,该函数所需的实参,局部变量就推入栈中,该函数执行完毕后,之前进入栈中的参数和变量等也都出栈被释放掉。它的运行方式类似于数据结构中的栈。 (二) 堆 这是由程序员控制分配和释放的区域,在C里,用malloc()函数分配的空间就存在于堆上。在堆上分配的空间不像栈一样在某个函数执行完毕就自动释放,而是一直存在于整个程序的运行期间。当然,如果你不手动释放(free()函数)这些空间,在程序运行结束后系统也会将之自动释放。对于小程序来说可能感觉不到影响的存在,但对于大程序,例如一个大型游戏,就会遇到内存不够用的问题了。 (三) 全局区 C里的全局变量和静态变量存储在全局区。它们有点像堆上的空间,也是持续存在于程 序的整个运行期间,但不同的是,他们是由编译器自己控制分配和释放的。 (四) 文字常量区 例如char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由编译器控制分配和释放。 (五) 程序代码区 存放函数体的二进制代码。 2. 例子(一) void main() 3. 例子(二) |