heap — увеличить переполнение стека

Есть ли способ увеличить размер кучи программы на C ++? В Android вы можете легко сделать это, объявив его большим в файле манифеста.

Я столкнулся с этой проблемой, когда попытался выделить один миллиард элементов массива в куче.

int main() {
int size = 1000000000;
int* nmbr = new int[size];
return 0;
}

0

Решение

Сам C ++ не знает, что такое «куча». Это проблема реализации, поэтому вы должны изучить документацию вашего компилятора. Вот что нашел в поиске Google «флаг размера кучи MSVC»:

http://msdn.microsoft.com/en-us/library/f90ybzkh.aspx

Цитирование со страницы MSDN:

Параметр / HEAP устанавливает размер кучи в байтах. Эта опция
только для использования при сборке .exe файла.

2

Другие решения

Обычно размер кучи зависит от конкретной реализации и зависит от используемого компилятора. Взгляните на документацию, большинство из них предоставляют способ изменить размер кучи.

Чтобы дать вам более общий ответ:

Куча может быть любого размера, вы не можете сравнить ее с памятью вашего компьютера. То, что на вашем компьютере может быть 4 ГБ памяти, не означает, что каждая программа может использовать столько же. Размер кучи по умолчанию в MS Visual C ++ составляет 1 МБ, но ваша программа все равно будет использовать намного больше, чем 1 МБ во время работы. Память, которую использует ваша программа, также состоит из стековой памяти, дескрипторов и потоков, используемых операционной системой, и, наконец, не в последнюю очередь программного кода и всех содержащихся в нем строк и других литералов.

Основная проблема в распределении памяти — как ее решить. В этом основное различие между архитектурами x86 и x64. В 32-разрядной операционной системе Windows ваша программа обычно имеет только 2 ГБ виртуальной памяти (или 3 ГБ со специальными настройками).

Когда-нибудь вы заметите, что вы можете получить ошибки памяти, даже если осталось достаточно места. Это может произойти, если память во время выполнения настолько фрагментирована, что среда выполнения не может вместить запрошенное количество между ними и обычно вызывается частыми утечками памяти. Чтобы избежать этого, приложения, которым требуется большой объем памяти, будут пытаться распределить ее большими порциями, прежде чем выполнять какую-либо реальную работу, и будут иметь какое-то управление памятью для самостоятельной обработки выделений (базы данных SQL могут сделать это). Таким образом, они могут переставлять данные в памяти в соответствии со своими потребностями. Существуют различные способы сделать это, в Windows вы можете использовать VirtualAlloc или какая-то другая форма распределения.

2

По вопросам рекламы [email protected]