Да, вы платите за эту дополнительную проверку. Это касается не только указателя, но и любого доступа к памяти (кроме, скажем, DMA). Однако стоимость проверки очень мала.
Пока ваш процесс запущен, таблица страниц не меняется очень часто. Части таблицы страниц будут кэшироваться в буфере трансляции трансляции, при этом доступ к страницам с записями в буфере не требует дополнительного штрафа.
Если ваш процесс обращается к странице без записи TLB, тогда CPU должен сделать дополнительный доступ к памяти для извлечения записи таблицы страниц для этой страницы. Затем он будет кэшироваться.
Вы можете увидеть эффект этого в действии, написав тестовую программу. Дайте вашей тестовой программе большой кусок памяти и начните случайное чтение и запись мест в памяти. Используйте параметр командной строки, чтобы изменить размер.
- Над размером кеша L1 производительность снижается из-за латентности кэша L2.
- Над размером кэша L2 производительность снизится до задержки в оперативной памяти.
- Над размером памяти, адресуемой TLB, производительность снижается из-за пропусков TLB. (Это может произойти до или после того, как вы закончите свободное пространство L2, в зависимости от ряда факторов.)
- Выше размера доступной оперативной памяти производительность снижается из-за обмена.
- Над размером доступного пространства подкачки и оперативной памяти приложение будет прекращено ОС.
Если ваша операционная система разрешает «большие страницы», TLB может действительно покрыть очень большое адресное пространство. Возможно, вы можете саботировать ОС, выделив 4 тыс. Кусков от mmap
, и в этом случае пропуски TLB могут ощущаться только с несколькими мегабайтами рабочего набора в зависимости от вашего процессора.
Однако: Небольшое падение производительности должно быть сопоставимо с преимуществами виртуальной памяти, которых слишком много, чтобы перечислять их здесь.
Кажется странным, что ваш ответ явно «нет», но вы начинаете с «да». Вы не платите за дополнительную проверку действительности, она необходима для реализации виртуальной памяти. –
@DavidSchwartz: Я считаю, что проверка прав на страницы является частью виртуальной памяти, поэтому да, проверка имеет стоимость, потому что виртуальная память имеет стоимость. Вам не обязательно соглашаться с этим, но вам не нужно спорить о семантике. –
Он спросил, оплачивает ли рабочий код стоимость проверки на * дополнительную *, которая вызывает неправильный код. Это не. Дополнительная проверка действительности не требует затрат, потому что нет дополнительной проверки действительности. Проверка действительности не выполняется как дополнительная проверка, а часть проверок, необходимых для работы действительного кода. Это не просто семантическая проблема, кто-то, кто не читает ваш ответ близко и критически, может обернуться впечатлением, которое противоположно истине. –