【基础编程】聊聊C语言-变量的寿命

上一篇在编程世界的容器中,我们讲述了程序中的数据都存储在变量中,而变量根据数据类型的不同所占用的内存大小也不一样。但是计算机的内存大小是有限的不可能无限的分配下去,所以为了充分利用内存资源,在所有的编程语言中变量是有寿命的,就像我们人类似的到了一定岁数就要驾鹤西去。这篇我们就讲讲变量的寿命。

说到变量的寿命(术语叫做生命周期),那么和它息息相关的就是变量的作用域了。一般来说作用域越大,活的时间越长,作用域越小,活的时间越短,但是并不绝对。那么什么是作用域呢?简单理解就像游戏中你的角色的攻击范围。

作用域有哪几种?

  • auto(自动的): 这是函数内部定义变量的缺省存储方式。auto变量的作用域为从定义点到该局部程序块尾部,作用域结束该类型的变量所占用的内存就会被释放。
  • static(静态的): 在函数外部说明为static的变量的作用域为从定义到该文件尾部;在函数内部说明为static的变量的作用域为从定义到该局部程序块尾部。该种类型的变量程序结束所占用的内存才会释放。
  • extern(外部的): 这是在函数外部定义的变量的缺省存储方式。extern变量的作用域是整个程序。该种类型的变量也是程序结束所占用的内存才会释放。

所以根据作用域的不同变量可以分为局部变量和全局变量。局部变量用完就会释放(静态局部变量除外),全局变量程序结束才会释放所占内存。

生命周期有哪几种?

根据作用域的不同,生命周期可以分为三种:

  • extern和static修饰的变量生命周期比较长,它从程序开始执行开始,到程序退出时为止。依赖整个程序的执行时间。
  • 函数型参和auto变量的生命周期较短,函数开始它的生命开始,函数结束它的生命也就结束了。依赖于函数的执行时间。
  • 动态分配数据的生命周期也是动态的,它从调用malloc()或calloc()为数据分配存储空间时开始,到程序调用free()或程序退出时为止。

变量的寿命我们就讲到这里,下篇我们讲讲变量的存储类型和作用范围,期待大家的捧场。

本文属原创,转载请注明出处,违者必究

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

Java集合总结【面试题+脑图】,将知识点一网打尽!

1675
来自专栏calmound

javascript闭包

## 定义 **闭包:**有权访问另一个函数作用域中的变量的函数。 ## 解析 相信刚看到这个定义,很多人肯定很迷糊,现在给出示例。 ``` function ...

2537
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列12

一、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 排序的方法有: 插入排序(直接插入排序、希尔排序), 交换排序(冒泡排序、快速排序), 选择排序...

3066
来自专栏前端架构

JS中的bind的用法与注意事项

    this.dom = document.getElementById("scroll");

765
来自专栏开发与安全

从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector

一、对象语义与值语义 1、值语义是指对象的拷贝与原对象无关。拷贝之后就与原对象脱离关系,彼此独立互不影响(深拷贝)。比如说int,C++中的内置类型都是值语义,...

1950
来自专栏前端桃园

通俗的方式理解动态类型,静态类型;强类型,弱类型

1084
来自专栏北京马哥教育

烦透了的Python装饰器,终于用这12点理清楚了

本文转自互联网,作者Dzone,感谢作者的辛苦付出和贡献。 Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Desig...

3445
来自专栏阮一峰的网络日志

Stack的三种含义

学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。 理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的...

2944
来自专栏猿人谷

C++重要知识点小结---1

1.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。 2....

1749
来自专栏智能大石头

如何遍历维数和各维上限未定的多维数组

这个题目,不方便使用递归! 直觉告诉我,可以用两层遍历,外面一层是维数,里面一层是每一维。但实际上,要做起来很难! 最后决定最外层循环用元素个数,里面配合使用维...

1848

扫描关注云+社区