zoukankan      html  css  js  c++  java
  • C++中的全局变量、static全局变量、static局部变量、局部变量的区别

    C++的内存分为:堆、栈、自由存储区、全局/静态存储区、常量存储区。

    全局变量、static全局变量、static局部变量时存放在全局/静态存取区的,是在程序编译的时候,就在全局存储区分配内存的,生存期为整个程序运行,直至运行结束才会被系统回收。

    全局变量和static全局变量的区别在于作用域,全局变量可以在其他文件中应用,加上extern关键字即可;但是static全局变量只作用于当前文件中。

    static局部变量的生存期也是这个程序运行期,但是作用域还是局部的,只是作用域代码段执行完之后程序不会释放内存,也不会在下一次执行的时候再次分配内存。

    局部变量在程序运行时被创建,分配的是栈中的内存,随着程序的执行,一旦局部变量的作用域代码段运行结束,系统会自动释放内存,并且在下一次运行时会重新分配。

    常量存储区存储字符串等常量,生存期是整个程序运行期,作用域看定义在哪里,当程序运行结束时这块存储区会被释放。

    在C++中,由new和delete关键字来申请和释放的内存区域称为自由存储区,当这块自由存储区是由堆实现的时候,可以说new所申请的内存区域在堆上。其实堆是C语言和操作系统的术语,是操作系统维护的一块内存,而自由存储区是C++中通过new和delete动态分配和释放对象的抽象概念。堆和自由存储区并不等价。堆的内存申请和释放由编程者控制,因此比较危险,处理不当容易产生内存泄露;而栈是由编译器自动管理的,无需我们手动控制。

    https://www.cnblogs.com/learning-zjx/p/10645659.html

  • 相关阅读:
    js中return的作用
    jstl标签详解总结
    css——overflow属性用法
    oracle数据批处理
    SQL Server 2000/2005 分页SQL — 单条SQL语句
    dataset和实体类 之间的转换
    barmanager设置
    C#集合类(HashTable, Dictionary, ArrayList)与HashTable线程安全
    comboboxEdit 不能输入,只能选择
    C#在父窗口中调用子窗口的过程(无法访问已释放的对象)
  • 原文地址:https://www.cnblogs.com/masbay/p/14171295.html
Copyright © 2011-2022 走看看