2016-05-07 3 views
0

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

ответ

1

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

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

+0

Да. Но это виртуальные адреса? Фактическое место, где оно будет сохранено, то есть физические адреса зависят от сопоставления виртуальных адресов с физическими адресами TLB. Итак, в такой ситуации элементы массива 1D будут отображаться в смежные области памяти или могут быть сопоставлены с физическими адресами на разных страницах? –

+0

Нет. Виртуальные адреса и TLB не нужны для 2D-массивов. Из вида памяти 2D-массив и 1D-массив выглядят одинаково. –

+0

Виртуальные адреса и TLB не отображаются для пользовательского процесса. Все это происходит в операционной системе, что позволяет каждой программе иметь uniqe-память и не нужно знать о свопинге и т. Д. –

Смежные вопросы