C语言内存划分

1 局部变量

普遍局部变量在一个函数内定义,只在函数范围内有效,在复合语句中定义,只在复合语句中有效,如果没有赋初值,内容为随机,生命周期为函数或复合语句结束。

static局部变量的作用域也是在定义的函数内有效,static局部变量的生命周期和程序运行周期一样,同时static局部变量的值只初始化一次,但可以赋值多次。static局部变量若未赋以初值,则由系统自动赋值:数值型变量自动赋初值0,字符型变量赋空字符。

2 全局变量

在函数外定义,可被本文件及其它文件中的函数所共用,若其它文件中的函数调用此变量,须用extern声明,全局变量的生命周期和程序运行周期一样,不同文件的全局变量不可重名。

Static全局变量在函数外定义,作用范围被限制在所定义的文件中

不同文件静态全局变量可以重名,但作用域不冲突。

3全局函数和静态函数

在C语言中函数默认都是全局的,使用关键字static可以将函数声明为静态,函数定义为static就意味着这个函数只能在定义这个函数的文件中使用,在其他文件中不能调用,即使在其他文件中声明这个函数都没用。对于不同文件中的staitc函数名字可以相同。

 

类型

作用域

生命周期

auto变量

一对{}

当前函数

static局部变量

一对{}

整个程序运行期

extern变量

整个程序

整个程序运行期

static全局变量

当前文件

整个程序运行期

extern函数

整个程序

整个程序运行期

static函数

当前文件

整个程序运行期

register变量

一对{}

当前函数

4 内存分区

程序没有加载到内存前,可执行程序内部已经分好3段信息,分别为代码区(text)、数据区(data)和未初始化数据区(bss)3 个部分。

代码区是指令集合,通常共享只读。

全局初始化数据区/静态数据区

该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。

未初始化数据区

存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行之前被内核初始化为 0 或者空(NULL)。

程序在加载到内存前,代码区和全局区(data和bss)的大小就是固定的,程序运行期间不能改变。然后,运行可执行程序,系统把程序加载到内存,除了根据可执行程序的信息分出代码区(text)、数据区(data)和未初始化数据区(bss)之外,还额外增加了栈区、堆区。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值