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

Я имею в виду, когда у нас в C ++ есть таблица: int tab[3] = {1,2,3}; мы знаем, что если tab адрес равен X, тогда адрес tab[1] равен X + 1. Я немного читал о виртуальных и физических адресах, поэтому я думаю, что эти адреса являются виртуальными. Так что если в физической памяти tab - это адрес Y, то tab[1] - это Y + 1 или нет?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

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

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

Для большинства вещей "несмежный в физическая память "не имеет значения.

Однако; для (прямого и ассоциативного) кэшей существует потенциальная потеря эффективности. Чтобы понять это, представьте, что если есть кэш-память объемом 64 КБ, а у вас есть массив размером 64 КБ, но физические адреса случайно используют одни и те же записи в кэше - вы можете получить массив, борющийся за одинаковое небольшое количество кэша (и невозможно использовать большую часть кэша).

Чтобы предотвратить эту проблему, хорошие операционные системы используют так называемые «раскраски страниц» или «раскраски кешей»; что в основном означает, что физические страницы размещаются так, что страницы (биты адреса, которые имеют значение для определения того, где в кэше должны находиться данные) кажутся смежными (даже если физические страницы не являются смежными). Вы можете прочитать больше об этом здесь: https://en.wikipedia.org/wiki/Cache_coloring

1 голос
/ 11 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...