内存分区

本文详细介绍了程序运行过程中内存的不同区域划分及其特点,包括代码段、全局变量区、栈、堆等,并对各区域内的变量生命周期、作用域、默认值及链接属性进行了总结。

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

先将内存区域进行划分包括:代码段,全局变量区,栈,堆。

接下来让我们看看一些常见的内容分别位于哪个区域内,并对其生命周期、作用域、默认值、链接属性进行总结:

一.全局变量区:定义在函数外部的变量

位置:  函数外部

生命周期:从程序运行开始到程序销毁为止。

作用域:从定义该变量开始到文件结束为止。

默认值:0

内存区域:全局静态变量区

 

全局变量可以在其他的源文件中使用,例如:

 

 

首先在test_01 中定义一个全局变量a,并将其赋值为50

 

然后在另一个源文件test_02中,我们可利用extern 来使用全局变量 a。

 

注:extern 是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。

 

可以顺利运行

二.静态全局变量区:

生命周期:从程序运行开始创建,程序结束销毁

作用域:从定义该变量开始,一直到文件的结束

默认值:0,

内存区域:全局(静态)变量区

链接属性:内部

在全局变量的前面加上static就是静态变量,静态全局变量有以下特点:

1.不用担心其他原文件使用同名

2.本文件中定义的静态变量不能被其他文件使用

三.定义在函数内部的变量,包括形参

生命周期:进入函数时创建,函数退出时销毁

作用域:只在函数内部有效

默认值:随机值

内存区域:栈

链接属性:无

局部变量在它的生命周期结束时,它的内存也随之消失,再次使用时再次申请空间,并且每次重新定义和初始化。

四.局部静态变量

生命周期:第一次进入函数时创建,程序结束时销毁

作用域:只在函数内部有效

默认值:0

内存区域:全局(静态)变量区

链接属性:——

静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。本次接着来使用。静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同。

五.动态内存

生命周期:调用动态内存创建函数时创建,free时销毁

作用域:在未free该动态内存前,只要获得该动态内存的首地址就可以使用

默认值:——

内存区域:堆

链接属性:——

六.函数

如果要从其他文件调用函数可以用extern,前提是该函数不是static函数。

如:

 

test_01 中定义了一个 add 函数,接下来在test_02中引用它:

还有一种方法就是自己创建一个头文件(add .h),在其中对所需函数进行声明。如下:

后我们就可以在需要使用这个函数的源文件中引用这个头文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值