Отображение массивов из виртуального адреса в физический адрес

Когда двухмерный массив объявляется статически, мы получаем огромный непрерывный кусок виртуальных адресов. Эти адреса не нужно сопоставлять с непрерывными адресами памяти в физических адресах. То же самое происходит с 1-мерным массивом? Смежны ли адреса отдельных элементов в одномерном массиве в физическом адресном пространстве или они могут быть сопоставлены с адресами на разных физических страницах?


person Sahana ys    schedule 07.05.2016    source источник


Ответы (1)


Виртуальное адресное пространство не имеет ничего общего с массивами в программировании на C (я предполагаю, что вы используете C).

Когда у вас есть 2D-массив, последнее измерение просто виртуальное. За кулисами у компилятора есть один длинный одномерный массив, и когда вы хотите достичь одного конкретного узла, он быстро умножит первый индекс и длину пробега столбца перед добавлением второго индекса.

person Stian Skjelstad    schedule 07.05.2016
comment
Ага. Но ведь это же виртуальные адреса? Фактическое местоположение, где он будет храниться, то есть физические адреса, зависит от сопоставления фактических и физических адресов с помощью TLB. Итак, в такой ситуации будут ли элементы одномерного массива отображаться в непрерывные области памяти или они могут быть сопоставлены с физическими адресами на разных страницах? - person Sahana ys; 07.05.2016
comment
Нет. Виртуальные адреса и TLB не нужны для 2D-массивов. С точки зрения памяти, 2D-массив и 1D-массив выглядят одинаково. - person Stian Skjelstad; 07.05.2016
comment
Виртуальные адреса и TLB не видны для пользовательского процесса. Все это происходит в операционной системе, что позволяет каждой программе иметь уникальную память и не нужно знать о подкачке и т. Д. - person Stian Skjelstad; 07.05.2016