我是 c++ 新手,对全局变量有一个疑问。我在许多示例中看到,全局变量是带有堆地址的指针。所以指针在全局/静态变量的内存中,地址后面的数据在堆上,对吗?
取而代之的是,您可以声明存储数据的全局(无指针)变量。因此数据存储在全局/静态变量的内存中而不是堆中。
与第一个使用指针和堆的解决方案相比,这个解决方案有什么缺点吗?
编辑:
第一种解决方案:
//global
Sport *sport;
//somewhere
sport = new Sport;
第二种方案:
//global
Sport sport;
最佳答案
将数据存储在全局/静态变量中的一个缺点是,大小在编译时是固定的,不能更改,而堆存储的大小可以在运行时确定,并在整个过程中反复增长或缩小运行。对于全局/静态变量,生命周期也固定为程序从开始到结束的完整运行,而不是堆存储,在堆存储中,它可以在整个程序运行时获取和释放(甚至重复)。另一方面,全局和静态存储管理都由编译器为您处理,而堆存储必须由您的代码显式管理。所以总而言之,全局/静态存储更容易,但不如堆存储灵活。
关于C++:作为指针的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429391/