2015-08-05 3 views
1

Я пытаюсь выделить память 1 гигабайт, используя malloc() на Windows, и это не удается. Я знаю неопределенность malloc. Что является лучшим решением для распределения памяти на 1 гигабайт?Malloc не может выделить память 1 GiB на Windows

+3

вам нужно 1GB ??? –

+3

Почему вы используете 'malloc()' в C++? Вы используете Win32 или Win64? –

+4

Помните, что 'malloc' выделяет * смежный * кусок памяти, и если нет большого блока, распределение будет терпеть неудачу. –

ответ

4

Если вы используете 32-разрядное (x86) приложение, вы вряд ли сможете выделить 1 ГБ непрерывной памяти (и, конечно же, не можете выделить 2 ГБ). Что касается этого, вы должны увидеть почтенную презентацию «Почему ваша игра в Windows не будет работать в 2 147 352 576 байтах» (Gamefest 2007), прикрепленной к this blog post.

Вместо этого вы должны создать приложение как собственное 64-разрядное (x64) приложение.

Вы можете включить /LARGEADDRESSAWARE и придерживаться 32-разрядного приложения на Windows x64, но оно имеет ряд особенностей и может ограничить, какие библиотеки поддержки сторонних разработчиков вы можете использовать. Лучшим решением является использование родной x64, если это возможно.

+0

Это неверно. Адресное пространство для 32-разрядных приложений с большим адресом Space - 4 ГБ в Windows 64. – MSalters

+0

Как подробно изложено в презентации, вы можете использовать LAA для 32-разрядных приложений на Windows x64, чтобы получить 4 ГБ памяти, но гораздо лучшим решением является использование родной x64 в первую очередь. –

+0

enable/LARGEADESSESSAWARE работал для меня. Спасибо – chenna

1

Используйте флаг /LARGEADDRESSAWARE, чтобы сообщить Windows, что вы не делаете забавные вещи с адресами. Это разблокирует дополнительное 2 ГБ адресного пространства на Win64.

Смежные вопросы