郝斌吧 关注:5,010贴子:7,126
  • 8回复贴,共1

关于静态变量,动态变量,静态内存分配,动态内存分配的问题。

只看楼主收藏回复

在 谭浩强的《C程序设计(第4版)》,第七章,7.9.2小节中:
以下为书中原文:
函数中的局部变量,如果不专门声明为static(静态)存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的局部变量(包括在复合语句中定义的局部变量),都属于此类。在调用该函数时,系统会给这些变量分配存储空间,在函数调用结束时就自动释放这些存储空间。
在 《郝斌C语言视频教程》,第144集,指针之24-动态内存和静态内存的比较 中:
以下是视频的中的原文:
静态内存是由系统自动分配,由系统自动释放
动态内存是由程序员手动分配,手动释放。
综上所诉:谭浩强说:系统自动分配,自动释放的内存空间,是动态分配的。
郝斌说: 系统自动分配,自动释放的内存空间,是静态分配的。
请问: 我的理解是否有误?错在哪里?哪位大神来详细解释一下,动态变量,动态内存,静态变量,静态内存。这4者之间的关系。


IP属地:江苏1楼2015-09-12 23:17回复
    。。。在线等了这么长时间,回答了好几个问题。。。就没人 能回答我的问题吗?


    IP属地:江苏2楼2015-09-13 00:00
    回复
      2025-12-25 03:54:05
      广告
      不感兴趣
      开通SVIP免广告
      静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。
      而自动变量(即动态局部变量)属于动态存储类别,分配在动态存储区空间而不再静态存储空间,函数调用后即释放。
      使用static 声明的变量属于静态局部变量,时分配在静态存储空间中的。
      而其他动态局部变量是分配在动态存储区的,这与动态地分配存储空间是有区别的,不要搞混了。
      动态分配的存储空间需要手动释放,郝斌老师并没有说错。


      IP属地:广东3楼2015-09-13 21:27
      回复
        也就是说变量分配在动态存储区和动态地分配存储空间是不一样的。上面有两个错别字,将就下看吧


        IP属地:广东4楼2015-09-13 21:29
        收起回复
          本来看郝斌老师的视频 是看的明明白白的。 回过头来看书。 反倒给我搞糊涂了。 我现在是知道 为什么 郝斌老师说 这本谭浩强的书写的不好了。。。那是真不好啊。算了 就在书上大概了解一下 郝斌老师没讲过的地方好了。


          IP属地:江苏5楼2015-09-14 22:03
          回复
            同学,郝斌老师这块明显讲错了。


            6楼2016-06-29 23:39
            回复
              可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。
              静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
              栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
              堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。
              代码区:存放函数体的二进制代码


              7楼2016-06-29 23:39
              回复
                哪里有郝斌老师c教程的链接呢。我都找不到。麻烦发给我一下呗。谢谢


                IP属地:福建来自Android客户端8楼2016-07-03 10:10
                回复