gpt4 book ai didi

c++ - 数组大小错误 x64 进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:10 26 4
gpt4 key购买 nike

我正在检查我可以在 X64 应用程序上创建多大的数组,我的理解是我可以在 X64 进程上创建大于 2^31 的数组,但我在 VS2010 编译器上遇到编译错误,代码如下

const size_t ARRSIZE = size_t(1)<<32;
int main()
{
char *cp = new char[ARRSIZE];
return 0;
}

在目标 x64 平台上的 VS2010 上给出编译器错误“错误 C2148:数组的总大小不能超过 0x7fffffff 字节”,我最多可以创建 (size_t(1)<<32 - 1);

我有 Linker->Advanced->Target Machine is Machinex64。Linker->System->Enable Large Addresses 也为 Yes(不确定这是否真的很重要)。pc 中存在的分页文件\Physical Ram 在这里重要吗? (我确定它是一个 64 位应用程序,因为如果我删除该行并且只有 char* cp;它是 8 字节。)我是否缺少某些设置?

最佳答案

这似乎是针对 x64 目标的 32 位交叉编译器中的一个缺陷。 Microsoft Connect link icabod 在上面的评论中发布解决了这个特定问题。不幸的是,错误的状态已设置为已关闭 - 不会修复

使用 x64 的 32 位交叉编译器将无法编译以下代码片段:

char* p = new char[(size_t)1 << 32];

const size_t sz = (size_t)1 << 32;
char* p = new char[sz];

当使用 x64 的 32 位交叉编译器编译时,以上两个都将失败并显示错误消息 error C2148: total size of array must not exceed 0x7fffffff bytes。不幸的是,即使在针对 x64 的 64 位版本的 Windows 上运行,Visual Studio 也会启动 32 位编译器。

可以应用以下解决方法:

  • 使用适用于 x64 的 native 64 位编译器从命令行编译代码。
  • 将代码更改为以下任一:

    size_t sz = (size_t)1 << 32;  // sz is non-const
    char* p = new char[sz];

    std::vector<char> v( (size_t)1 << 32 );

该错误在 Visual Studio 2012 中仍然存在,所有解决方法仍然适用。

关于c++ - 数组大小错误 x64 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46423970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com