C语言---内存分布

代码示例展示了C语言中变量在内存中的分配情况,包括栈区、堆区、全局区和常量区。栈区用于自动分配空间,如局部变量,按高地址向低地址增长;堆区需动态分配并手动释放;全局区存储全局和静态变量;常量区存放常量。指针p展示了对内存地址的引用和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们用一点代码来引入话题

int main(int argc, char *argv[]) {
	
	int a=5,b=10,c=20;
	int *p=&b;
	
	printf("a的地址为:%x\n",&a);	//十进制:28
	printf("b的地址为:%x\n",&b);	//十进制:24
	printf("c的地址为:%x\n",&c);	//十进制:20
	printf("***********************\n");
	printf("p的地址为:%x\n",&p);	//十进制:8
	printf("p内保存的地址为:%x\n",p);
	printf("*p指向了:%d\n",*p);
	printf("*(p+1)指向了:%d\n",*(p+1));
	printf("*(p-1)指向了:%d\n",*(p-1));
	return 0;
}

运行结果
从上面的代码我们可以知道在内存中,系统分配的变量地址基本都是连续的,并且间隔大小由变量类型决定。
内存分布图
内存区域如上图所示,由图我们可以知道,内存空间由低到高大致可以分为代码区、常量区、全局(静态)区、堆区、栈区。

  • 栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的(高地址往低地址增长)。(const 在栈里)
  • 堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放。
  • 全局区:全局变量、静态变量(static)
  • 常量区:代码中的数字,字符等常量,例如’a’,—1.2等
  • 代码区:存放可执行代码,避免频繁的读硬盘。请添加图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值