Введение
Набор моделей памяти процессора x86
В вычислительной технике модели памяти x86 — это набор из шести различных моделей памяти процессора x86, работающего в реальном режиме, которые определяют способ использования регистров сегментов и размер указателей по умолчанию.
In computing, the x86 memory models are a set of six different memory models of the x86 CPU operating in real mode which control how the segment registers are used and the default size of pointers.
Другие платформы
В защищенном режиме сегмент не может быть одновременно доступным для записи и исполнения. Поэтому при реализации модели памяти Tiny регистр сегмента кода должен указывать на тот же физический адрес и иметь тот же лимит, что и регистр сегмента данных. Это нивелировало одно из преимуществ 80286, которое обеспечивало невозможность исполнения сегментов данных и записи в сегменты кода (что исключало возможность самомодифицирующегося кода). Однако на 80386, с его блоком управления памятью с использованием страниц, стало возможным защищать отдельные страницы памяти от записи. Модели памяти не ограничиваются 16-битными программами. Можно использовать сегментацию и в 32-битном защищенном режиме (что приводит к 48-битным указателям), и существуют компиляторы языка C, которые это поддерживают. Однако сегментация в 32-битном режиме не позволяет получить доступ к большему адресуемому пространству, чем охватывает один сегмент, если только некоторые сегменты не находятся в памяти постоянно, а линейное адресное пространство используется лишь как кэш для большего сегментированного виртуального пространства. Она обеспечивает более надежную защиту при доступе к различным объектам (области длиной до 1 МБ могут использовать гранулярность защиты доступа в один байт, в отличие от более грубой гранулярности в 4 КБ, обеспечиваемой только страничной организацией памяти), и поэтому применяется только в специализированных приложениях, например, в телекоммуникационном программном обеспечении. Технически, "плоское" 32-битное адресное пространство является "маленькой" моделью памяти для сегментированного адресного пространства. В обоих режимах все четыре сегментных регистра содержат одно и то же значение.
x86-64
На платформе x86-64 существует семь моделей памяти, поскольку большинство ссылок на символы имеют ширину всего 32 бита, и если адреса известны на этапе компоновки (в отличие от позиционно-независимого кода). Это не влияет на используемые указатели, которые всегда являются 64-битными плоскими указателями, а только на способ размещения значений, к которым осуществляется доступ через символы.