五类内存
1.栈区( )
主要存放函数参数值、函数局部变量等。典型操作是子程序调用时,子程序不断占用栈内存,而子程序也正是利用了栈先入后出的特性实现了子程序调用的功能。
栈空间从高地址向低地址延伸,是一块连续的内存空间,且是一块非共享区域。
2.堆区( )
由程序员进行申请与释放,如 、 、 等方法,若程序员未释放,则由 进行回收。堆是从低地址向高地址扩展的内存区域,是一块不连续的内存区域,但是一块共享区域。
3.全局区(静态区 / )
存储全局变量和静态变量的区域,程序结束后由 释放。
4.文字常量区
常量字符串存放区域,程序结束后由 释放。
5.程序代码区
存放函数体的二进制代码。
代码举例
int total = 0; //全局变量,全局区
int main(){
int a; //栈
char b[] = "abc"; //栈
char *c = "123456"; //c在栈上,"123456"在常量区
static int d = 0; //全局区
b = (char*)malloc(10); //分配的10字节内容在堆区,但b指针仍在栈区
return 0;
}