关于C语言中静态变量、全局变量的内存释放问题

maxiulei 2007-02-02 05:53:35
如果一个函数在进程中被多次调用,请问这个中的静态变量、全局变量的内存是不是在每次调用完后都被完全释放释放。还是有可能会在下次调用中释放。
...全文
2372 14 打赏 收藏 转发到动态 举报
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
  • 打赏
  • 举报
回复
全局变量也是静态存储的,不会释放掉。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧