c++ - 在 C++ 中声明一个大的全局变量会导致错误消息 0xc0000018
问题描述
对于我的应用程序,我需要std::array
在全局内存中声明一个 big。它的总大小约为 1GB。所以我像这样声明了一个全局变量:
#include<array>
std::array<char,1000000000> BigGlobal;
int main()
{
//Do stuff with BigGlobal
}
代码编译得很好。当我运行应用程序时,我收到错误消息:
应用程序无法正确启动 (0xc0000018)。单击确定关闭应用程序
我正在使用 Visual Studio 2017。我知道堆栈保留大小有一个 MSVC 链接器选项。但它只与局部变量有关,与全局变量无关。你能帮我解决这个问题吗?
解决方案
C++ 编译器充满了限制——有些使其成为标准,有些则没有。
常见的限制包括变量名称长度的大小限制、函数可以调用自身(直接或间接)的次数、具有自动存储持续时间的变量占用的最大内存大小等。
您使用std::array
.
在您的情况下,一个明智的解决方法可能是使用 astd::vector
作为全局类型,然后在 的第一条语句中调整该向量的大小main
。当然,这假设在程序控制到达之前没有使用全局变量main
——如果有的话把它放在更明确的地方。
推荐阅读
- html - 使用 display: block 添加滚动条后,HTML 表格 tbody 列宽不匹配 thead 列宽
- javascript - 我无法在 React-Native 中从 Firebase 渲染我的数据
- php - 如何访问数组的第一行,然后从中访问键和元素
- python - Python - 在浏览器选项卡中编辑 SharePoint xlsx (selenium)
- python - 使用IQR方法在python中查找异常值,不包括中位数
- python - 单击时嵌套菜单选项不响应
- asp.net-mvc - 在 Razor 视图中显示 RadioButtonList 模型数据
- windows - 错误 - 无法将参数绑定到参数“InputObject”,因为它为空
- c++ - 在返回的 lambda 中为捕获的局部变量复制省略
- python-3.x - 在破折号中动态创建基于其他列值的依赖列