数组太大

问题描述 投票:0回答:1

我使用的是 Visual Studio,正在构建一个 64 位程序。我有 16GB 内存。我遇到以下错误:

int main()
{
    auto* p = new char[2'200'000'000]; // array is too large
    auto* p = new char[2'100'000'000]; // This is fine

}

这是我要分配的 2.2 GB。这是怎么回事?

编辑:这确实可以编译,似乎只是智能感知给出了该消息。

c++ visual-studio intellisense
1个回答
0
投票

请导航至“工具”->“选项”->“C/C++”->“Intellisense”,然后检查您是否已勾选

Enable 64-bitIntellisense 

在C++中,数组下标的类型为

std::size_t
,因此数组的大小不能超过
size_t
所能表示的大小。该数据类型是通过库文件stdio.h中的typedef声明的。
size_t
在32位系统上定义为unsigned int,即32位无符号整数。在64位系统上定义为unsigned long,即64位无符号整数。

typedef unsigned int size_t;//32-bit
typedef unsigned long size_t;//64-bit

看起来你的智能感知只是检测数组下标为 int 类型。(最大值:2^31-1=2'147'483'647)。

据我了解,Visual Studio 中默认的 Intellisense 是 32 位。当该值小于或等于int类型的最大值(2'147'483'647)时,智能感知显示正常。否则,显示

array is too large

作为一种解决方法,您还可以定义一个 unsigned long 类型变量,然后创建一个数组以避免智能感知错误消息。 例如

希望这可以帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.