Нужно ли балансировать использование стека и кучи на платформах онлайн-кодирования, таких как spoj? - PullRequest
0 голосов
/ 25 апреля 2020

Я прочитал, что лимит памяти для проблем с спойом составляет 256 МБ. Я использую спой здесь в качестве примера. Я хочу более общий ответ. Предположим, я динамически выделяю массив из 50 миллионов целых чисел в C ++, который занимал бы около 200 МБ пространства кучи. Значит ли это, что я могу выделить максимум 56 МБ данных в стеке вызовов? Допустим, я использую всю доступную память для выделения кучи. Означает ли это, что теперь я не могу даже объявить целочисленную переменную в стеке, хотя я еще нигде не использовал этот стек. Это так работает или стек и куча имеют раздельные пределы памяти и работают независимо?

1 Ответ

0 голосов
/ 25 апреля 2020

В linux / x86-32 ограничение стека по умолчанию составляет 2 МБ. Все современные ОС имеют одинаковое ограничение.

Как правило, вы не должны создавать большие объекты в стеке. Помимо локальных переменных, стек также используется для стековых фреймов для функций. Для каждого активного вызова функции в стеке используется некоторая память.

AFAIK на конкурирующих платформах ограничение памяти для самой программы.

...