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

前端之家收集整理的这篇文章主要介绍了在C中声明向量作为全局变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C中声明一个向量为全局是个好习惯吗?

这就是我做的.

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

我的程序成功编译,但我不知道这是否可以导致运行时
在某些情况下出错.根据我的理解,全局变量的内存将在编译时分配,编译器可以保留该向量可扩展的有限数量的内存.达到这个限制后,正在写的内容可以进入另一个变量所使用的内存中.

请指教.

解决方法

My program compiles successfully,but I am not sure whether this could
lead to a runtime error under certain circumstances.

这是安全的; vec变量的存储将被静态分配,并且它的默认构造函数将在某个时候被调用(恰好在整个程序的上下文中没有严格定义,因为没有严格定义跨平移单元的初始化顺序).

and the compiler may reserve a limited amount of memory to which this
vector can expand. Upon hitting this limit,what is being written can
eat into the memory used by another variable.

向量本身将其存储分配给堆,因此如果将该向量实例化为局部变量,则扩展将不会有任何限制:您将基本上受限于可以连续存储的内存量在时间点分配矢量需要重新分配其内部存储.

所有这一切说,虽然这样做是安全的,但并不一定是好的做法;它属于每个其他全局变量或全局可访问的存储位的域,这可能是一个有争议的主题.一般来说,我建议,最好避免全局变量作为规则.虽然在某些情况下可能是可以接受的,但是全局访问与您控制对变量的访问的能力相违背,并对其执行不变量以及控制或暗示的状态.这可能导致难以维护的系统作为代码库的缩放,因为这些访问路径没有明确说明.

猜你在找的C&C++相关文章