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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值