首页 > 解决方案 > 在 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++visual-c++global-variables

解决方案


C++ 编译器充满了限制——有些使其成为标准,有些则没有。

常见的限制包括变量名称长度的大小限制、函数可以调用自身(直接或间接)的次数、具有自动存储持续时间的变量占用的最大内存大小等。

您使用std::array.

在您的情况下,一个明智的解决方法可能是使用 astd::vector作为全局类型,然后在 的第一条语句中调整该向量的大小main。当然,这假设在程序控制到达之前没有使用全局变量main——如果有的话把它放在更明确的地方。


推荐阅读