超过 1GB 的内存分配错误

More than 1GB memory allocation error

我正在尝试开发一个从 RAM 分配给定数量 GB 的应用程序。当我尝试分配 1 GB RAM 时,它工作正常,但超过 1 GB,它崩溃了。

我正在使用 Windows 7 - 64 位并且我有 6 GB RAM(安装内存)。我用 Qt 开发这个应用程序,我使用的是 Visual Studio 2013.

代码在这里:

int size = 1024 * 1024 * 1024;
m_Size = ui.CPUAllocationEntry->text().toInt();


m_Arr =(char*) malloc(sizeof(char)*size*m_Size);
memset(m_Arr, 1, size*m_Size);
if (m_Arr == NULL)
{
    qDebug() << "Pointer Null" << endl;
}
else
    qDebug() << "Pointer NOT null" << endl;

return;

错误是:

First-chance exception at 0x0F993FD4 (msvcr120d.dll) in ttool.exe: 0xC0000005: Access violation writing location 0x00000000.

Unhandled exception at 0x0F993FD4 (msvcr120d.dll) in ttool.exe: 0xC0000005: Access violation writing location 0x00000000.

我将其作为 32 位应用程序和 64 位应用程序进行了尝试,结果是一样的。我还为链接器尝试了 /LARGEADRESSAWARE 选项。但是我找不到解决方案。

我知道这可能与我使用了多少 RAM 有关,但是当我使用 3.02GB RAM 并尝试分配 2GB 时,它也崩溃了。

我该如何解决这个问题?

你的记忆是碎片化的。您要求一大块 1GB,但没有这样的块可用。可能有十个 512MB 的块可用,但这还不够好。

您的问题是您在导致整数溢出的乘法中使用类型 int,它是一个 32 位整数(1024 * 1024 * 1024 * 2 产生负结果, 32 位 int).

您应该改用 size_t(假设您的 OS 是 64 位的,无论您的应用是否是)。