2015-05-11 2 views
1

Когда оперативной памяти недостаточно, динамически распределенные переменные в куче могут использовать пространство подкачки на диске (хотя и приводят к ухудшению производительности). Мой вопрос в том, может ли стек в памяти использовать пространство подкачки.Память: стек и своп

Например, следующая программа помещает большой массив в стек. (Конечно, обычно мы бы динамически выделяли большие переменные в куче.) Если эта программа вылетает при запуске, могу ли я запустить ее успешно, добавив пространство подкачки?

int main() 
{ 
    int myArray[1000000]; 
    return 0; 
} 

ответ

0

На самом деле это то, что делает своп, обменивает данные программы и пространство стека:

http://www.linuxjournal.com/article/10678

Они размещаются в анонимных страниц, названная так потому, что они не имеют никакого имени источника файловой системы. После изменения анонимная страница должна оставаться в ОЗУ на время выполнения программы, если для ее записи не требуется вторичное хранилище . Вторичное хранилище, используемое для этих измененных анонимных страниц , - это то, что мы называем местом подкачки.

Классическая рекомендация по системам, которые выполняют строгую учетную запись VM , различается, но большинство из них наводят вокруг «вдвое больше ОЗУ» фигура. Это число предполагает, что ваша память в основном будет заполнена пучком небольших интерактивных программ (где их площадь стека равна , возможно, их наибольшая потребность в памяти).

Скажите, что вы используете веб-сервер с 500 потоками, каждый с 8 МБ пространства стека. Это пространство стека потребует, чтобы у вас было 4 ГБ пространства подкачки, настроенное для бухгалтера памяти, чтобы быть счастливым.

+0

Спасибо, Самуэль за ссылку. Таким образом, это означает, что программа может работать, если добавлено достаточное пространство подкачки? – Tosh

+0

Да, точно:) – Samuel

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