为什么我不能在 Windows 11 上使用 C++ 创建大于 8GiB 的堆

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

我使用 CLion 在 Windows 11 上构建此代码。我的系统是 64 位并且具有 32GiB 内存。

#include <iostream>
#include <chrono>
#include <thread>

int main() {
    int len = 0;
    std::cin >> len;
    auto arg = std::make_unique<int32_t[]>(len);
    std::this_thread::sleep_for(std::chrono::seconds(100));
}

我正在尝试创建一个大型动态数组。当此数组的类型为

int
(4 BYTES)时,此数组的最大大小约为8192MiB。如果我将此数组的类型更改为
int16_t
(2 字节),则此数组的最大大小约为 4096MiB。如果我将此数组的类型更改为
char
(1 字节),则此数组的最大大小约为 2048MiB。

| Size of variables | Max Memory (MiB) |
| ----------------- | ---------------- |
|      4 BYTES      |       8192       |
|      2 BYTES      |       4096       |
|      1 BYTES      |       2048       |

Code

VMMap

TaskManager

c++ windows memory heap-memory clion
1个回答
4
投票

int
可以容纳的典型最大值是 2,147,483,647,看起来您的最大尺寸受限于
int
的这个限制。

尝试使用

long long
而不是
int
len
.

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