Книга: Разработка приложений в среде Linux. Второе издание
13.2.1. Выравнивание по страницам
13.2.1. Выравнивание по страницам
Системная память делится на порции под названием страницы. Размер страницы изменяется в зависимости от архитектуры, и на некоторых процессорах размер страницы может изменяться ядром. Функция getpagesize()
возвращает размер (в байтах) каждой страницы системы.
#include <unistd.h>
size_t getpagesize(void);
Для каждой страницы системы ядро сообщает оборудованию, каким образом каждый процесс может получить доступ к странице (например, записать, выполнить или не выполнять никаких действий). Когда процесс пытается получить доступ к странице способом, нарушающим ограничения ядра, это вызывает ошибку сегментации (SIGSEGV
), которая обычно приводит к завершению процесса.
Адрес памяти должен быть выровнен по страницам, если это адрес начала страницы. Иначе говоря, адрес должен быть целым, кратным размеру страницы архитектуры. В системе со страницами в 4 Кбайт адреса 0, 4 096, 16 384 и 32 768 являются выровненными по страницам (конечно, это далеко не весь список), потому что первая, вторая, пятая и девятая страницы системы начинаются с указанных адресов.
- Урок 3.3. Работа с веб-страницами и файлами из Интернета
- Работа со страницами
- Выравнивание данных
- Как избежать проблем с выравниванием
- Выравнивание нестандартных типов данных
- Положение и выравнивание заголовка
- Выравнивание изображения
- 3. Обновление благосклонно к страницам, которые предоставляют качественный контент быстро и эффективно
- 9.2.3 Отказы при обращениях к страницам
- Выравнивание элементов управления
- Вертикальное выравнивание
- 7.5.2. Выравнивание памяти