【发布时间】:2019-02-24 22:08:47
【问题描述】:
我正在运行 Windows 10 64 位。我的编译器是 Visual Studio 2015。
我想要的是:
unsigned char prime[UINT_MAX];
(和更大的数组)。 该示例给出编译器错误 C2148,因为该应用程序是“Win32 控制台应用程序”。同样,我不能使用 new 创建数组;同样的问题。我将它构建为“x64 版本”,但我猜 WIN32 控制台部分正在获胜!
我想释放我的 64 位操作系统的力量,摆脱对数组索引的烦人 INT_MAX 限制,即正确的 64 位操作。我的应用程序是一个简单的 C/C++ 东西,除了命令行界面之外,它既不需要也不想要任何东西。
我确实安装了(免费)Visual Studio 2017 应用程序,但它没有提供我喜欢的简单控制台应用程序(所以我卸载了它)。
我是否可以在 Visual Studio 中构建其他一些应用程序类型来访问超过 4GB 的内存?是否有其他(免费)编译器可以用来在 Windows 下获得完整的 64 位访问权限?
【问题讨论】:
-
为 x64 架构而不是 x32 编译您的程序。
-
如果你没有足够的连续可用内存,那么分配也会失败
-
"我确实安装了(免费的)Visual Studio 2017 应用程序,但它没有提供我喜欢的简单控制台应用程序”但是.. Visual Studio 2017 有控制台应用程序的模板..
-
如果你试图在堆栈上声明该数组,它会因为内存不足以外的原因而失败。
-
过滤掉推测性噪音,即使在 x64 中,VC++ 允许的总连续原生数组大小(以字节为单位)为 2147483647 字节 (
0x7ffffffff)。您引用了错误代码,但没有引用错误消息,这似乎与您的困惑有关。如果您需要更多,则必须支持其他内容(例如std::vector<unsigned char>)。那时,您仅限于max_size()元素(18446744073709551615 用于unsigned char的向量),即使在那里,只有内存管理器可以找到这么大的孔。最后,WIN32宏与这些没有任何关系。
标签: c++ arrays 64-bit large-data