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

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

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

作用域有哪几种?

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

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

生命周期有哪几种?

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

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

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版6.4节虚函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

401
来自专栏LinkedBear的个人空间

唠唠SE的IO-02——字节输入输出流 原

计算机中都是二进制数据,一个字节是8个2进制位。字节可以表示所有的数据,比如文本,音频,视频。

743
来自专栏微信公众号:Java团长

深入理解Java I/O系列二:字节流详解

JAVA程序通过流来完成输入/输出。流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方...

652
来自专栏飞雪无情的博客

Go语言中new和make的区别

Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例...

972
来自专栏小小挖掘机

关于Python语言规范你需要知道的一些小tips

之前写代码感觉一直缺乏一定的规范,所以整理了一些Python的语言规范方面的东东,这个来自google发布的开源项目风格指南-Python语言规范。 1、对你的...

2846
来自专栏AI研习社

最常见的 35 个 Python 面试题及答案(2018 版)

作为一个 Python 新手,你必须熟悉基础知识。在本文中我们将讨论一些 Python 面试的基础问题和高级问题以及答案,以帮助你完成面试。包括 Python ...

1293
来自专栏达摩兵的技术空间

es6入门

es6作为最新的js语言版本,有很多特性是不得不晓的。下面将语法中常用的分析出来,对应到基本对象类型的会在对象里描述。

752
来自专栏Phoenix的Android之旅

为什么HashCode相同的两个对象可能不相等?

面试中曾经有这么一道题目,考察的是开发者对于 equals()和 hashCode()的理解, 题目是这样的,

792
来自专栏Android机动车

java内部存储简述

在实际项目中,会涉及到很多大量数据的访问,存储或者是计算,这个时候如果可以用合适的容器来存储这些数据,就会达到事半功倍的效果,也就是说,当你的程序遇到瓶颈的时候...

1033
来自专栏用户画像

C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details...

353

扫码关注云+社区