在 C 中将向量声明为全局变量

新手上路,请多包涵

在 C++ 中将向量声明为全局是一种好习惯吗?

这就是我所做的。

 #include <vector>
std::vector<int> vec;

我的程序编译成功,但我不确定在某些情况下这是否会导致运行时错误。根据我的理解,全局变量的内存会在编译时分配,编译器可能会保留有限的内存,这个向量可以扩展。达到此限制后,正在写入的内容可能会占用另一个变量使用的内存。

请指教。

原文由 cpp_noname 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

我的程序编译成功,但我不确定在某些情况下这是否会导致运行时错误。

这是安全的; vec 变量的存储将被静态分配,并且其默认构造函数将在某个时候被调用(确切地说,当在整个程序的上下文中没有严格定义时,因为跨翻译单元的初始化顺序不是严格定义)。

并且编译器可能会保留该向量可以扩展的有限内存量。达到此限制后,正在写入的内容可能会占用另一个变量使用的内存。

向量本身在堆上分配其存储空间,因此如果将向量实例化为局部变量,则不会对其扩展施加任何限制:您基本上会受到可以连续使用的内存量的限制在向量需要重新分配其内部存储的时间点分配。

综上所述,虽然这样做是安全的,但不一定是好的做法;它属于所有其他全局变量或全局可访问的存储位的域,这可能是一个有争议的主题。一般来说,我建议最好避免使用全局变量。虽然在某些情况下它可能是可以接受的,但全局访问与您控制对变量的访问并对其强制执行不变量以及它控制或暗示的状态的能力背道而驰。随着代码库的扩展,这可能导致系统难以维护,因为这些访问路径没有明确说明。

原文由 user197015 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题