Знайте, когда адрес памяти будет выровненный или невыровненный

regex="x86-headers/([^/]*)/.*"
for f in x86-headers/*/C/populate.sh; do [[ $f =~ $regex ]] && echo "${BASH_REMATCH[1]}"; done
elf
gl
gmp
gnome2
gtk2
jni
libc
2
12.10.2013, 23:00
1 ответ

Короче говоря невыровненный адрес является одним из простого типа (т.е. целочисленная или переменная с плавающей точкой), который является больше затем (обычно) байт и не равномерно делимым размером типа данных, который каждый пытается считать.

Address % Size != 0

Скажите, что Вы имеете этот диапазон памяти и читаете 4 байта:

                           +---------- 8 % 4 = 0, OK
                           |
                     ______+______
                    |             |
 ... 4   5   6   7   8   9   10  11  12  13  14  15  16  17 ...
 --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
 * | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
 --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
                            |_______.______|
                                    |
                                    +--- 10 % 4 = 2, Unaligned

Больше по вопросу в Documentation/unaligned-memory-access.txt.

3
27.01.2020, 22:06
  • 1
    Хранилище указателя адрес виртуальной памяти, таким образом, проверка Linux невыровненный адрес в виртуальной памяти? Если так, переменные всегда хранятся в выровненном физическом адресе также? номер –  MABC 13.10.2013, 00:38
  • 2
    @user2119381 начиная с памяти в большинстве систем разбит на страницы с размерами страницы от 4K, и выравнивание обычно является вопросом порядков величины, меньше (обычно ширина шины, т.е. 16/32/64/128b) alignedness идентично для виртуальных и физических адресов. –  peterph 13.10.2013, 00:54
  • 3
    я думаю булевская переменная & версия предпочтена по причине производительности как % подразумевать дубликат умножения или разделения? –  Alex 18.10.2013, 11:57

Теги

Похожие вопросы