C程序大致来讲可以分为四个数据区:常量区,静态去,堆区,栈区。
1.其中常量区存储了未被作为初始化使用的字符串常量和被const修饰的全局变量,其特点是只可被访问不可被写入,生命周期同程序的运行过程。
Char *p=”asdf”;//asdf会被存储在常量区
Char p[4]=”asdf”;//asdf不会被存储在常量区
2.静态区存储了全部的全局变量,和所有被static修饰的变量(包括全局和局部),其特点是生命周期很长(为一次程序的运行过程)并且只被初始化一次(在编译之后就已完成)。
3.栈区存储了所有自动存储(不加任何存储类型关键字修饰或被auto修饰)的局部变量,其特点是生命周期很短,仅仅是该变量所在函数的一次调用过程。运行时由操作系统分配并在函数结束后回收。由系统自动分配与回收
Char *p;p存在栈区
Struct student *s1;存在栈区
4.堆区是由操作系统负责维护的大片内存池,使用时需手动申请(调用malloc家族函数),但使用完毕后需手动释放,否则会造成严重的内存泄漏,直到该进程退出后才会被操作系统回收。需要手动释放
Struct student s1;存在堆区