Как я могу вставить переменную env в сопоставление ключей VIM?

Фактически, размер вашего виртуального стека составляет 8388608 байт (8 МБ). Конечно, естественно сделать вывод, что это не может быть правильным, потому что это смехотворно большой объем памяти для каждого потока, потребляемого для своего стека, когда в 99% случаев пара килобайт, вероятно, все, что им нужно.

Хорошая новость в том, что ваш поток использует только тот объем физической памяти, который ему действительно необходим. Это одна из волшебных возможностей, которые ваша ОС получает от использования аппаратного модуля управления памятью (MMU) в вашем процессоре. Вот что происходит:

  1. ОС выделяет 8 МБ виртуальной памяти для вашего стека, настраивая таблицы страниц MMU для вашего потока. Это требует очень небольшого объема оперативной памяти для хранения только записей таблицы страниц.

  2. Когда ваш поток запускается и пытается получить доступ к виртуальному адресу в стеке, которому еще не назначена физическая страница, MMU запускает аппаратное исключение, называемое «отказ страницы».

  3. Ядро ЦП реагирует на исключение ошибки страницы, переключаясь в привилегированный режим выполнения (который имеет свой собственный стек) и вызывает функцию обработчика исключений ошибки страницы внутри ядра.

  4. Ядро выделяет страницу физической ОЗУ этой странице виртуальной памяти и возвращается обратно потоку пользовательского пространства.

Поток пользовательского пространства не видит ничего из этого. С его точки зрения, он просто использует стек, как если бы память была там все время. Между тем, стек автоматически увеличивается (или не увеличивается) для удовлетворения потребностей потока.

MMU - ключевая часть оборудования современных компьютерных систем.В частности, он отвечает за большую часть «магии» в системе, поэтому я настоятельно рекомендую узнать больше о том, что делает MMU, и о виртуальной памяти в целом. Кроме того, если ваше приложение чувствительно к производительности и имеет дело со значительным объемом данных, вы должны понимать, как работает TLB (кеш таблицы страниц MMU) и как вы можете реструктурировать свои данные или свои алгоритмы, чтобы максимизировать процент попаданий TLB.

0
21.01.2017, 01:03
1 ответ
nnoremap <F3> "=strftime("%Y-%m-%d").' - '.$LOGNAME<CR>P
inoremap <F3> <C-R>=strftime("%Y-%m-%d").' - '.$LOGNAME<CR>
2
29.04.2021, 00:05

Теги

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