内存分类
1、栈区:由系统自动分配释放,存放局部变量、函数的参数等。Visual Studio2017默认情况下栈的大小为1MB,如果申请的空间超过栈的剩余空间,将提示Stack Overflow 。
void fun(int a) //栈
{
int b; // 栈
char str; //栈
}
2、堆区:在程序的执行过程中分配,由程序员决定。 通过malloc和free进行分配和释放。
void fun()
{
int *p = (int*)malloc(sizeof(int)); //分配在堆上
free(p); //释放
}
3、全局区(静态区):存放全局变量、静态变量和常量。根据存放的数据,又可以分为普通数据段(存放静态初始化的全局变量或常量)和BSS数据段(存放未初始化的全局变量)。
int a; // 全局区
int main()
{
static int b = 100; // 静态区
}
4、常量区:常量字符串。 当初始化赋值时,在常量区开辟空间保存该赋值,若以后有相同的常量则不需要再开辟空间,而是直接共用一个地址。
//p是全局变量,在全局区;“A”是字符串常量,在常量区
char *p = "A";
int main()
{
//p1是局部变量,在栈上;“A”是字符串常量,在常量区
char *p1 = "A";
//p2是局部变量,在栈上;“A”不是字符串常量
char p2[]= "A"; // 数组初始化的写法
//p3是局部变量,在栈上;“A”是字符串常量,在常量区
char *p3 = "A";
}
5、代码段:用来存放程序执行代码。