变量的内存分配情况(global,local,static)

C语言有 全局变量(Global)、本地变量(Local)、静态变量(Static)和寄存器变量(Register)。
每种变量都有不同的分配方式。

#include<stdio.h>
int g1 = 0, g2 = 0, g3 = 0;
int main()
{
	static int s1 = 0, s2 = 0, s3 = 0;
	int v1 = 0, v2 = 0, v3 = 0;
	printf("&g1 = 0x08%X	\n", &g1);	
	printf("&g2 = 0x08%X	\n", &g2);
	printf("&g3 = 0x08%X	\n\n", &g3);

	printf("&s1 = 0x08%X	\n", &s1);
	printf("&s2 = 0x08%X	\n", &s2);
	printf("&s3 = 0x08%X	\n\n", &s3);

	printf("&v1 = 0x08%X	\n", &v1);
	printf("&v2 = 0x08%X	\n", &v2);
	printf("&v3 = 0x08%X	\n\n", &v3);
}

执行结果:

&g1 = 0x088CA138
&g2 = 0x088CA13C
&g3 = 0x088CA140

&s1 = 0x088CA144
&s2 = 0x088CA148
&s3 = 0x088CA14C

&v1 = 0x08EFFA28
&v2 = 0x08EFFA1C
&v3 = 0x08EFFA10

输出的结果就是变量的内存地址。其中
v1、v2、v3 是 本地变量,
g1、g2、g3 是 全局变量,
s1、s2、s3 是 静态变量。

可以看到这些变量在内存中是连续分布的,但是本地变量和全局变量分配的内存地址差了十万八千里,而 全局变量静态变量 分配的内存是连续的。这是因为 本地变量 和 全局/静态变量 是分配在不同类型的内存区域中的结果。

对于一个进程的内存空间而言,可以在逻辑上分成3个部分:代码区、静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区。
是一种线性结构是一种链式结构

进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰的。

一个堆栈 可以通过 基地址栈顶 地址来描述。全局变量静态变量 分配在 静态数据区本地变量 分配在 动态数据区,即堆栈中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值