内存中的5个区域:堆、栈、静态区,代码区
一个程序的运行起来后,其在内存中有5个区域
1. 程序代码区
这个很简单,代码要执行,肯定要加载进内存, 我们不必关心。
2. 文字常量区
一般我们这样定义一个字符串时,其是在文字常量区的:
char* s1 = "hello, world";
char* s2 = "hello, world";
if(s1 == s2)
printf("s1和s2指向同一个在文字常量区的字符串");
这里, s1和s2指向的是同一个字符串
3. 静态存储区(不会释放,只到程序结束)
全局变量,静态变量会放在这个区域,事实上,全局变量也是静态的。
以上1,2,3三个区域的内存在程序起来的时候就开辟好了的。
4. 栈(}结束被自动释放)
局部变量就是在栈里的。另外,函数调用时的参数也是在栈里的,这个现在不必关心
5. 堆(没有被手动销毁,他一直存在,直到程序结束. )
malloc或new出来的内存就是在堆里的,需要程序员自己管理清除。
//1.栈区:特性先进后出(后进先出)
//栈的特性
/*
int a=10;//1
int b=10;//2
int c=10;//3
//创建顺序:123
//销毁顺序:321
//每一个函数都有一个栈帧
test();
int f=10;
*/
//函数中的变量一旦函数执行完成.全部被销毁.
/*
char *p=test2();
printf("%s",p);
*/
//2.堆区:程序员手动分配的内存,并且需要程序员手动销毁.(有几个专门的内存函数) 特点:一旦分配不管在什么地方.没有被手动销毁,他一直存在,直到程序结束.
//3.常量区:我们编写的程序种所有的常量都被放在常量区,直到程序结束为止
//4.静态区:1.全局变量.(所有大括号外边的变量).2.static标注的变量;
/*
for (int i=0; i<3; i++) {
static int count =0;//这句话只执行一次
//被static标注的变量会有一个初始值0;
count++;
printf("%d",count);
}
/
//5.代码区:我们编写的代码被编译器翻译之后,存入代码区
//malloc堆内存分配
//按照字节分配
//分配好的空间,使用什么类型的指针指向它,它就是什么类型的.
/*
int *p=malloc(4);
*p=10;
printf("%d",*p);
*/
/*
charchar *s=malloc(100);
strcpy(s, "大家好,我很