社区
C语言
帖子详情
关于C语言中静态变量、全局变量的内存释放问题
maxiulei
2007-02-02 05:53:35
如果一个函数在进程中被多次调用,请问这个中的静态变量、全局变量的内存是不是在每次调用完后都被完全释放释放。还是有可能会在下次调用中释放。
...全文
2372
14
打赏
收藏
关于C语言中静态变量、全局变量的内存释放问题
如果一个函数在进程中被多次调用,请问这个中的静态变量、全局变量的内存是不是在每次调用完后都被完全释放释放。还是有可能会在下次调用中释放。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mengyikaisi
2008-11-14
打赏
举报
回复
怎么我学的C语言老师都没讲这些;内存释放还有什么泄露之类的啊
blh
2007-02-05
打赏
举报
回复
任何静态变量,不管是全局的还是局部定义的,只会在你的进程中出现一个副本,都由编译器负责指定空间(进程的data区),只是区别于变量的访问范围(全局,还是函数内部),这些变量的空间知直道你的进程退出才会释放
doubhor
2007-02-05
打赏
举报
回复
进程是资源的拥有者。
内存泄漏只针对在堆上面的动态内存使用。
进程使用的内存空间变动情况一般与动态内存使用有关,无论是自己动态使用还是调用的库中动态使用。
nxf1125
2007-02-05
打赏
举报
回复
Kevin_Fighting() 解释的就很好,楼主.
Kevin_Fighting
2007-02-03
打赏
举报
回复
PS:如果搂主的意思是同时运行两个进程,那当然比一个进程所用的内存多了 :P
如果每次都只有一个进程,那内存的占用量当然是一样的了.
Kevin_Fighting
2007-02-03
打赏
举报
回复
没有问题。不存在泄漏的情况。什么是泄漏?泄露是指一块内存没有被释放,不能为其他程序(或变量)所占用。
只有在堆中分配的内存才存在泄漏的问题.因为堆中的可用内存是操作系统在维护,你没有释放内存的话,操作系统就不会让它移作他用.形象地说,就是这块内存被"泄漏"了.
如果是全局变量或局部静态变量,编译器会为其分配一个位于静态存储区的地址。这个地址在程序编译链接后就是固定的.如果一个程序在不断地动态申请内存而不释放,才会造成内存的耗尽.
mslblogger
2007-02-02
打赏
举报
回复
启动之后没有内存泄漏只是你运行时没有问题不代表你退出的时候也没有问题吧?比如说你的程序还在运行可是你们强行中断了,你怎么保证他没有问题?
zvarlet
2007-02-02
打赏
举报
回复
无关,因为每次运行完以后,程序所占用的内存都会被释放.
maxiulei
2007-02-02
打赏
举报
回复
谢谢各位的回答,我好像问错了,我想问的是:我的进程启动之后,如果没有内存泄漏,在同样的环境下,进程的内存使用量与运行的次数有关系吗?
todototry
2007-02-02
打赏
举报
回复
全局都属于静态,
局部区分静态非静态,
局部静态和全局的区别在于可见范围,局部能使用外部看不见的意思,本质相同的
晨星
2007-02-02
打赏
举报
回复
打错字了,“全局静态作量”,是想说“全局变量”,没有静态。
todototry
2007-02-02
打赏
举报
回复
全局变量静态变量在程序结束的时候系统释放
晨星
2007-02-02
打赏
举报
回复
它们的生命周期是跟整个程序的生命周期相同。
局部静态变量跟全局静态作量的区别仅仅在于可见域不同,前者只在定义它的那个函数中可见。
晨星
2007-02-02
打赏
举报
回复
全局变量也是静态存储的,不会释放掉。
C语言
中
全局变量
与静态
全局变量
区别
全局变量
(外部变量)的说明之前再冠以static 就构成了静态的
全局变量
。
全局变量
本身就是静态存储方式, 静态
全局变量
当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态
全局变量
的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的
全局变量
在各个源文件
中
都是有效的。 而静态
全局变量
则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件
中
不能使
C语言
变量在
内存
中
的位置——局部变量、
全局变量
、
静态变量
C语言
中
的变量根据其类型和生命周期被分配到
内存
的不同区域。栈区用于存放局部变量,堆区用于动态分配的
内存
,全局区(静态区)存放全局和
静态变量
,常量区存储常量,代码区存放程序代码。栈区由编译器自动管理,堆区需要程序员手动分配和
释放
。全局区和常量区在程序结束时由系统
释放
。通过Keil工具对STM32系统的验证,可以观察到不同变量在
内存
中
的具体分布情况,如栈区变量的连续地址、堆区的不连续地址分配,以及
全局变量
和
静态变量
在.data和.bss段的存储。这些
内存
区域的管理对于程序的性能和稳定性至关重要。
C语言
中
的
静态变量
和非
静态变量
,
C语言
中
的
静态变量
和非
静态变量
static作为
C语言
中
的关键词,常用来修饰变量和函数。static修饰的变量:1.全局
静态变量
:在
全局变量
前面加上关键词static,
全局变量
就被定义成一个全局
静态变量
。(1)
内存
中
的位置:静态存储区。(2)作用域:在程序任何地方都是可见的。2.局部
静态变量
:在局部变量前面加上关键词static,局部变量就被定义成一个局部
静态变量
。(1)
内存
中
的位置:静态存储区。(
全局变量
在加上static修饰...
C语言
中
静态变量
的概念和用法
C语言
中
静态变量
的概念和用法
C语言
中
有关
全局变量
、动态变量、
静态变量
、和静态
全局变量
C语言
中
有关
全局变量
、动态变量、
静态变量
、和静态
全局变量
全局变量
: 其作用范围是“整个工程”,只需要在一个源文件
中
定义,就可以作用于所有的源文件。当然,其它不包括
全局变量
定义的源文件需要extern关键字再次声明这个
全局变量
静态
全局变量
: 使用static关键字修饰,也具有
全局变量
功能,和
全局变量
区别在于如果该程序包含多个文件,其作用范围仅在定义的那个文件,不能作用于其它文件,这样即使两个不同的源文件都定义了相同名字的静态
全局变量
,他们也是不同的变量。 局部变量 局部作用域,它只被初始化一次,自从第一次
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章