Почему на современном Linux размер стека по умолчанию настолько огромный - 8 МБ (даже 10 на некоторых распределениях)

Если ваши данные отформатированы точно так, как показано (т.е. нет других " или ; в других столбцах, которые необходимо сохранить), то вы можете просто использовать tr , чтобы удалите эти символы:

tr -d '";' < input.txt > output.txt
10
05.10.2018, 13:12
2 ответа

Как уже говорили другие, и как упоминается в ссылке, которую вы предоставляете в своем вопросе,наличие стека в 8 МБ ничему не повредит (, кроме потребления адресного пространства — в 64-битной -системе это не будет иметь значения ).

Linux уже очень давно использует стеки по 8 Мбайт; изменение было введено в версии 1.3.7 ядра в июле 1995 года. Тогда оно было представлено как ввод ограничения, ранее его не было:

Limit the stack by to some sane default: root can always increase this limit if needed.. 8MB seems reasonable.

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

Для потоков, если ограничение стека(RLIMIT_STACK)не ограничено,pthread_createприменяет свои собственные ограничения к стекам новых потоков — и на большинстве архитектур это меньше 8 МБ.

17
27.01.2020, 20:01

8 МБ — это виртуальный размер стека. Ошибка страницы произойдет, когда ваше приложение попытается использовать больше стека, чем физически выделено в данный момент. Затем обработчик отказов страниц ядра выделяет физическую страницу , после чего ваше приложение продолжит работу.

Полное объяснение см. в https://unix.stackexchange.com/a/280865/21212.

Таким образом, уменьшение размера стека не должно влиять на уменьшение использования физической памяти вашим приложением.

4
27.01.2020, 20:01

Теги

Похожие вопросы