C语言学习-内存

内存分类

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、代码段:用来存放程序执行代码。

你可能感兴趣的:(C语言学习-内存)