在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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...