Выравнивание данных
Модератор: Модераторы
<a href='http://freepascal.ru/wiki/index.php/%24A_%D0%B8%D0%BB%D0%B8_%24ALIGN_:_%D0%B2%D1%8B%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85' target='_blank'>$A или $ALIGN : выравнивание данных</a>
Но выравнивает он как-то странно, в версии 2.0.0 по-моему все выравнивалось по границе 4х байт. А вот в 2.0.2 что-то не понятное. Можешь сам посмотреть сгенерерировав ассемблерный листинг (-a). :blink:
Но выравнивает он как-то странно, в версии 2.0.0 по-моему все выравнивалось по границе 4х байт. А вот в 2.0.2 что-то не понятное. Можешь сам посмотреть сгенерерировав ассемблерный листинг (-a). :blink:
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Сам я никогда ей не пользовался, так выравнивание по умолчанию в FPC 2.0.0 было 4 байта. Согласно статьи Криса Касперски из журнала "Системный админристратор" (что-то там про оптимизацию, ссылки нет) оптимальный варинт для i386 это 4 байта. FPC везеде в ассемблерном коде вставлял (по-умолчанию) директиву balign 4. В версии 2.0.2 он генерит что-то страшное :blink:
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Код: Выделить всё
.section .text
.balign 16
.balign 16
.globl PASCALMAIN
.type PASCALMAIN,@function
PASCALMAIN:
.globl main
.type main,@function
main:
...
.section .data
.ascii "FPC 2.0.2 [2005/12/07] for i386 - Linux"
.balign 8
.balign 8
.globl THREADVARLIST_P$HELLO
...
.balign 4
.globl FPC_THREADVARTABLES
.type FPC_THREADVARTABLES,@object
FPC_THREADVARTABLES:
.long 2
.long THREADVARLIST_SYSTEM
.long THREADVARLIST_P$HELLO
...
Возможно конечно, что это связано с архитектурой совремнных процессоров. Я просто много чего не знаю (например лишь недавно узнал что для повышения скорости лучше использовать mov вместо push). Есть мнения почему он такое выравнивание задает (то 16, то 8, то 4)?
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Это скомпелированный с -a файл (там еще balign полно):
а 16 не странненько?
Код: Выделить всё
program hello;
begin
writeln('hello');
end;
Разное выравнивание для кода и данных - понятно. А вот .balign 8 - странненько.
а 16 не странненько?
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
-
Nikoilay
