MST

星途 面试题库

面试题:C++中静态与动态引用全局变量的基础差异

在C++中,简述通过静态方式和动态方式引用全局变量的主要区别,包括内存分配、作用域以及生命周期方面,并各举一个简单代码示例。
12.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

静态方式引用全局变量

  1. 内存分配:在程序启动时,全局变量就被分配在静态存储区,这块内存空间在程序的整个运行期间都存在。
  2. 作用域:全局变量的作用域是整个程序,在任何函数内部都可以访问,只要在访问前声明(如果变量定义在使用之后)。
  3. 生命周期:从程序启动开始,到程序结束才释放,与程序的生命周期相同。

示例代码:

#include <iostream>
// 定义全局变量
int globalVar = 10; 

int main() {
    // 直接使用全局变量
    std::cout << "Global variable value: " << globalVar << std::endl; 
    return 0;
}

动态方式引用全局变量(通过指针动态分配全局变量)

  1. 内存分配:使用new操作符在堆上分配内存,这是动态分配的过程,在需要时才分配内存。
  2. 作用域:虽然指针本身可以在局部函数内定义,但指向的全局变量的堆内存空间,只要指针有效且未被释放,在程序任何地方都可通过指针访问。
  3. 生命周期:由程序员手动管理,使用delete操作符释放内存,如果不及时释放会导致内存泄漏。

示例代码:

#include <iostream>
// 定义全局指针变量
int* globalPtr; 

int main() {
    // 动态分配内存给全局指针
    globalPtr = new int(20); 
    std::cout << "Dynamic global variable value: " << *globalPtr << std::endl; 
    // 释放内存
    delete globalPtr; 
    return 0;
}

主要区别总结

  • 内存分配:静态方式在程序启动时于静态存储区分配;动态方式在需要时在堆上分配。
  • 作用域:静态方式作用域为整个程序;动态方式通过指针操作,只要指针有效,在程序各处可访问,但指针本身作用域依定义位置而定。
  • 生命周期:静态方式与程序生命周期相同;动态方式由程序员手动管理,需及时释放避免内存泄漏。