Что происходит с данными на страницах памяти? - PullRequest
0 голосов
/ 29 ноября 2018

Допустим, у нас есть 64-байтовые страницы.В области виртуальной памяти 4-байтовый int выделяется в [0, 4), и теперь мы хотим выделить массив 10 double.Например, если malloc решит поместить массив в [4, 84), будет один double, проходящий через страницу 0 и страницу 1 в [60, 68).Что происходит, когда мы пытаемся получить доступ к этому элементу?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Границы страницы имеют смысл только для выделения памяти и преобразования логических адресов.Приложение не видит границ страниц (кроме как при размещении страниц).Все, что видит приложение - это непрерывное логическое адресное пространство.

0 голосов
/ 29 ноября 2018

Краткий ответ : процессор будет считывать это значение.

Длинный ответ : есть пара предположений, которые нам необходимо уточнить:

  1. о какой архитектуре процессора мы говорим?Некоторые архитектуры (например, x86 и x64) могут работать со смещенными значениями, а некоторые другие (например, ARM) не могут.Это означает, что к значениям в ARM можно получить доступ только по адресам, которые N * sizeof(primitive-value-type), где N - целое число.Функции управления памятью и компиляторы знают об этом, поэтому они автоматически выравнивают распределение на этих платформах.
  2. функции управления памятью сами используют часть памяти для ведения домашнего хозяйства.Это означает, что приложение не будет видеть последовательные распределения, как описано в вопросе.В зависимости от используемого менеджера кучи, первое выделение будет иметь несколько размеров указателя, которые стоят от 0, а следующее выделение вернет адрес, который по крайней мере будет иметь несколько размеров указателя после окончания первого выделения.
  3. до тех пор, пока вышеуказанные условия выполняются, чтение с нескольких страниц полностью прозрачно для приложения.Процессор выполняет линейное преобразование физического адреса за сценой и вызывает операционную систему, когда страница должна быть загружена в физическую память.Но это не то, о чем приложение (как правило) может и должно знать.
  4. кто-то другой может отразить на 64-байтовых страницах.Мне неизвестна платформа со страницами размером менее 4 КБ, но я предполагаю, что рассматриваемый 64-байтный размер страницы использовался только для демонстрационных целей.
...