前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >存储类别、链接和内存管理(二)

存储类别、链接和内存管理(二)

作者头像
哆哆jarvis
发布2022-08-23 14:03:07
5030
发布2022-08-23 14:03:07
举报
文章被收录于专栏:嵌入式进阶之路

上期我们介绍了作用域、链接和存储期。这期我们继续介绍。

一、自动变量

自动存储类别的变量具有自动存储期、块作用域且无链接。默认情况下,声明在块或函数头中的任何变量都属于自动存储类别。使用auto作为存储类别说明符。

再复习一下:

无链接意味着这些变量属于定义它们的块、函数或原型私有。

二、寄存器变量

在函数头中使用关键字register,便可请求寄存器变量。

它们都是块作用域、无链接和自动存储期。通常变量储存在内存中,寄存器变量储存在CPU的寄存器中,换句话说,储存在最快的可用内存中。与普通变量相比,访问这些变量的速度更快。

三、块作用域的静态变量

静态变量(static variable)听起来自相矛盾,像是一个不可变的变量。实际上,静态的意思是该变量在内存中原地不动,并不是说它的值不变。具有文件作用域的变量自动具有(也必须是)静态存储期。前面提到过,可以创建具有静态存储期、块作用域的局部变量。这些变量和自动变量一样,具有相同的作用域,但是程序离开它们所在的函数后,这些变量不会消失。也就是说,这种变量具有块作用域、无链接,但是具有静态存储期。计算机在多次函数调用之间会记录它们的值。在块中(提供块作用域和无链接)以存储类别说明符static(提供静态存储期)声明这种变量。来看下面例子:

四、外部链接的静态变量

外部链接的静态变量具有文件作用域、外部链接和静态存储期。该类别有时称为外部存储类别(external storage class),属于该类别的变量称为外部变量(external variable)。把变量的定义性声明(defining declaration)放 在在所有函数的外面便创建了外部变量。当然,为了指出该函数使用了外部 变量,可以在函数中用关键字extern再次声明。

units具有文件作用域、外部链接和静态存储期。所以即使我们在main函数里没有声明uints,程序一样可行。来看看注释掉extern声明。

再看看

为什么会这样?因为在函数里面定义的units是局部变量,具有块作用域、自动存储期、无链接属性。相当于外部变量units和局部变量units是独立的。

五、内部链接的静态变量

该存储类别的变量具有静态存储期、文件作用域和内部链接。这种变量过去称为外部静态变量(external static variable),但是这个术语有点自相矛盾(这些变量具有内部链接)。但是,没有合适的新简称, 所以只能用内部链接的静态变量(static variable with internal linkage)。普通的外部变量可用于同一程序中任意文件中的函数,但是内部链接的静态变量只能用于同一个文件中的函数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆jarvis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档