C++:作为指针的全局变量

标签 c++ variables memory global

我是 c++ 新手,对全局变量有一个疑问。我在许多示例中看​​到,全局变量是带有堆地址的指针。所以指针在全局/静态变量的内存中,地址后面的数据在堆上,对吗?
取而代之的是,您可以声明存储数据的全局(无指针)变量。因此数据存储在全局/静态变量的内存中而不是堆中。
与第一个使用指针和堆的解决方案相比,这个解决方案有什么缺点吗?

编辑:
第一种解决方案:

//global 
Sport *sport;
//somewhere
sport = new Sport;

第二种方案:

//global
Sport sport;

最佳答案

将数据存储在全局/静态变量中的一个缺点是,大小在编译时是固定的,不能更改,而堆存储的大小可以在运行时确定,并在整个过程中反复增长或缩小运行。对于全局/静态变量,生命周期也固定为程序从开始到结束的完整运行,而不是堆存储,在堆存储中,它可以在整个程序运行时获取和释放(甚至重复)。另一方面,全局和静态存储管理都由编译器为您处理,而堆存储必须由您的代码显式管理。所以总而言之,全局/静态存储更容易,但不如堆存储灵活。

关于C++:作为指针的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429391/

相关文章:

linux - Linux 中的直接内存访问

c++ - 'Resource Acquisition Is Initialization'解决内存泄漏问题

c++ - 为什么这段代码有时会产生不同的输出?

c++ - 如何为商店数据库添加名称字段 (OOP/C++)

java - Android 如何将变量分配给按钮?

c++ - 为什么在 C++ 中有不同的变量初始化方式?

c++ - C++ 中引用的引用有什么用?

javascript - 为模板中的变量赋值 - Angular7

Python 占用过多内存

delphi - 优化 Delphi 中的类大小。有类似 "packed classes"的东西吗?