C语言的6种存储模型

C语言的6种存储模型

 

C语言提供了包括基于指针的存储模型和自动、寄存器、静态&空链接、静态&外部链接、静态&内部链接在内的6种存储模型。与存储期(storage duration)、作用域(scope)、链接(linkage)的不同组合与不同的存储模型紧密相关。


存储期(storageduration)就是变量可在内存中存在的时间。而作用域(scope)和链接(linkage)则能够限定变量的使用范围。


作用域(scope)具体来说就是程序中可以访问一个变量标识符的一个乃至多个区域。C语言中拥有包括代码块作用域(block scope)、函数原型作用域(function prototype scope)、文件作用域(file scope){全局变量(global variable)具有文件作用域属性}在内的多种作用域类型。


链接(linkage)包括外部链接(external linkage)、内部链接(internal linkage)、空链接(no linkage)。具有外部链接(external linkage)属性的变量可以被工程内的全部文件识别。具有内部链接(internal linkage)的变量能被本文件识别。具有空链接(no linkage)属性的变量可以在本代码块内识别。


存储期(storageduration)分为静态存储期(static storage duration)和自动存储期(auto matic storage duration)。


自动存储模型的变量具有自动存储期(auto matic storage duration)、代码块作用域(blockscope)、空链接(no linkage),使用存储类型说明符 auto 加以标识。


寄存器存储模型与自动存储模型一样具有自动存储期(auto matic storage duration)、代码块作用域(blockscope)、空链接(no linkage),但还需要使用存储类型说明符 register加以声明。


静态&空链接存储模型具有静态存储期(static storage duration)和代码块作用域(block scope)、空链接(no linkage)属性。例如静态变量(static variable)就是具有静态&空链接。


静态&外部链接存储模型具有文件作用域(file scope)、外部链接(external linkage)、静态存储期(static storage duration)。具有静态&外部链接属性的变量被称之为外部变量(external variable),需要使用关键字 extern 加以标识。


静态&内部链接存储模型具有静态存储期(static storage duration)、文件作用域(file scope)、内部链接(internal linkage)。需要使用存储类型说明符 static 加以标识。


和前面的5种服从预先定义的内存管理规则的存储模型不同,基于指针的存储模型给编程人员带来了极大的灵活性。内存分配函数 malloc()和与之相对应的 free(),是分配和管理内存的有力工具。这里值得注意的一个小细节是malloc()函数的返回类型,它的返回类型是被称之为“通用指针类型”的指向void的指针类型,所以显式的进行类型指派是有必要且可行的。


最后穿插一个编程小技巧,如果在编程中变量需要被多个文件共同使用,好的处理方法是将它们统一在一个单独的源文件中定义,并且将其定义为静态&外部链接存储模型的变量。这样有利于管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值