c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...
C语言中静态变量是什么意思,有什么作用,static在数据类型前面表示什么
最近刚看了C存储类的章节。所以来说说。
C语言为变量提供了⑤种不同的存储模型,或者说是存储类。
①个变量可以用存储时期描述,也可以用作用域描述,也可以用它的链接描述。c 类 static 函数
存储时期就是变量在内存中的保留时间。比如说全局变量①直都在,而①个代码块里的局部变量当这个代码块执行完以后,它就不在了。
存储时期分为,自动,和静态。
变量的作用域和链接①起可以说明,程序的那些部分可以通过变量名来使用该变量。
变量的作用域分两类,①个是代码块作用域,①个是文件作用域。
(还有个叫函数作用域的,和goto语句有关,说的是goto语句的标签堆该函数的任何地方的代码都是可见的,无论出现在哪①个代码块)
链接分③种,外部链接,内部链接,和空链接。
函数内的局部变量是空链接。所有函数以外定义的变量有内部链接和外部链接之分。
内部是说,该变量可以在这个文件内使用。
外部是说,可以在多个文件内使用,就是你定义声明①次变量,在另外①个相关文件内不用再定义,可以直接引用。
不同的存储类就是变量的作用域、链接以及存储时期的不同组合。
这样的组合的结果是有以下⑤种存储类。
① · 自动变量
② · 寄存器变量
③ · 空链接的静态变量
④ · 具有外部链接的静态变量
⑤ · 具有内部链接的静态变量
所以说,要明白静态变量是什么先要明白,静态这个概念是针对存储时期来说,举个例子,①个定义的函数内的局部变量,如果你不声明它的存储类,那么它默认是自动变量,自动变量的特点就是你调用这个函数的时候,这个变量存在,调用结束以后,这个变量就不存在了。而你如果把这个函数里的①个变量存储时期定义为静态的,那么当这个函数结束以后,这个变量还在。只是说作用域限于这个函数。这种变量叫做空链接的静态变量,又叫代码块作用域的静态变量。
还有如果在所有函数值外定义的变量也称之为静态变量。
下面来说关键字static和静态变量的关系。c 类 static 函数
①个在有函数以外声明的变量,它是具有文件作用域的变量,即从它定义的位置到文件结束时都是可以用这个变量的名来引用它的。(在某个函数内,如果没有相同名称的变量,引用的就是这个变量),而对于文件作用域变量,它必然是①个静态变量,所以对于文件作用域的变量,关键字static的作用不是表明存储时期,而是链接类型,如下
int n;static int m;int main()n就是具有外部链接的文件作用域变量
m就是具有内部链接的文件作用域变量
而对代码块作用域变量使用static关键字,才是把它从自动变量变为静态变量。
========================================
综上可知,静态变量是针对存储时期这①维度的概念。
对于代码块作用域变量使用static关键字可以把自动变量变为静态变量。
对于文件作用域变量使用static关键字是说明链接类型。
========================================
即C语言的基于动态内存分配函数的存储时期
和线程存储时期。
还有是对于外部链接来说,在①个文件中定义声明①次后,在另外①个文件中引用声明后,就可以使用,这个有问题么?
没有操作系统,就是裸机。整台机器就你①个程序,享有全部的内存空间。CPU运行之初,会设置好栈空间的起始地址。堆空间的起始地址是编译器根据代码段和数据段的地址和大小推算出来的。栈从高往低长,堆从低往高长。
栈的管理比较简单,调用函数的时候会有压栈和出栈的动作,编译器已经生成好了这些代码。
堆的管理,调用malloc,因为①般单片机的编译器都有特定的修改,支持动态分配内存,例如分配和释放内存,空闲内存的管理。但是管理算法比较简单,会出现内存碎片。
好搜摇一摇咋将静态图变为动态图?是什么样
● 将允许用户查看源代码?微软瞄准嵌入式设备
● 微软是幕后黑手?SCO要消灭嵌入式Linux系统
● 8标准版预览已发布?嵌入式Windows
● 召唤出什么样有什么样规律?圣斗士星矢重生十连抽
● 全明星探案是什么样意思什么样梗?UC浏览器3.19啥
● 什么样情况下该用什么样?火线指令战柏林步推荐
● 七款CPU选购推荐?什么样配什么样弹
● 什么样英雄站什么样位?崩坏世界定位介绍
● 我跟你什么样仇什么样怨?《变身吧主公》天下第一比武大会
● 想要什么样来什么样?海岛奇兵刷极品神像技巧
● 6月会出什么样什么样新战机?全民飞机大战6月预告
● 如何获得FP?《万千回忆》FP是什么样有什么样用
● 会开放什么样新区域解锁什么样武器?封印者8.4二次转职有奖励
● 实验体碎片有什么样用能兑换什么样?DNF咋获得
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-64244-1.html
c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...相关推荐
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用. 和堆一 ...
- C++ 堆、栈、自由存储区、全局静态存储区和常量存储区
文章来自一个论坛里的回帖,哪个论坛记不得了! 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时 ...
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调 ...
- C语言中的 static变量(全局和局部)、static函数总结
简介: C语言中的 static变量(全局和局部).static函数总结 文章目录 本博文的简述or解决问题? 同步博文: static 变量: 静态局部变量: 静态全局变量: static 函数-. ...
- python中静态变量和静态方法_python类和函数中使用静态变量的方法
本文实例讲述了python类和函数中使用静态变量的方法.分享给大家供大家参考.具体分析如下: 在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossib ...
- 堆、栈、自由存储区、全局/静态存储区、常量存储区比较
1.C语言中分为下面几个存储区 栈(stack): 由编译器自动分配释放 堆(heap): 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 全局区(静态区): 全局变量和静态变量的存储 ...
- C语言编程中的“堆”和“栈”七大不同之处
对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap).栈(stack).堆栈(stack)等.初学开发过程中往往让人混淆不清.今天我们来谈谈堆和栈的具体区别,来帮助初学者理清思路. 堆和栈 ...
- c语言获取系统剩余内存_C语言编程中的“堆”和“栈”七大不同之处
更多精彩,请点击上方蓝字关注我们! 对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap).栈(stack).堆栈(stack)等.初学开发过程中往往让人混淆不清.今天我们来谈谈堆和栈的具体 ...
- C++内存分配方式-堆、栈、自由存储区、全局/静态存储区和常量存储区
一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack)- 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) ...
最新文章
- java实现fread_fread函数读取到的数据和实际数据不一样
- 利用OpenGL渲染并用OpenCV输出显示二维图像
- Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
- Webwork 学习之路(四)Configuration 详解
- vSphere ESXi命令行使用方法详解
- ASP.NET MVC 过滤器(三)
- message There is no Action mapped for namespace [/] and action name [login] associated with context
- 加sql查询语句导出_搞不懂这些查询语句,SQL简单查询也无法从入门到熟练
- 【C语言进阶深度学习记录】十九 #pragma使用与分析
- 理解Linux的overcommit memory
- 单片机modbus rtu通讯_Modbus-RTU通讯
- How to get the xpath by clicking an html element
- linux微信登陆失败,微信登陆失败原因与解决方法
- I2C协议关于ack和nack的思考
- 联想第二季度业绩持续走强 营业额连续9个季度实现年比年增长 税前利润及净利润增长势头强劲
- 李一男旗下自游家汽车无法交付车辆 旅程还没开始就将结束
- 解决log4j2子线程无法获取到traceId问题
- 工作6年,谈谈我对“算法岗”的理解
- 给定空间的四个点的笛卡尔积坐标,使用python、shell计算二面角
- FreeBSD 13.0-RELEASE 安装记录