Sergei I. Gorelkin писал(а):- Требование наличия внешнего ассемблера зависит от платформы. Для x86 внутренний ассемблер реализован, а для того же ARM - нет, поэтому внешний ассемблер таки необходим.
Ну, я почти так и написал... Впрочем, исправлю на более явное утверждение.
Sergei I. Gorelkin писал(а):- Можно получить листинг в "привычном" формате, добавив ключ -Amasm (вместе с -al). Собрать его masm-ом скорее всего не получится, но для чтения сойдет.
На amd64 — нельзя. Я попытался.
- Код: Выделить всё
Warning: Assembler output selected "MASM" is not compatible with "Linux for x86-64"
Warning: "AS" assembler use forced
Было мне ответом.
Sergei I. Gorelkin писал(а):Строки типа ShortString не завершаются нулевыми байтами. В приведенном примере компилятор зачем-то добавил его к литералу, но полагаться на это в общем случае нельзя.
Опаньки. Исправлю.
Sergei I. Gorelkin писал(а):В состоянии {$h+} литералы компилируются как ansistring
Хм. Сейчас полезу проверять — дело в том, что ключ -Sh не поменял ничего...
Добавлено спустя 2 минуты 32 секунды:Проверил. Ничего не поменялось и с {$h+}
Добавлено спустя 9 минут 32 секунды:Sergei I. Gorelkin писал(а):а если они содержат символы >127, то как unicodestring
При условии, что явно указана кодировка источника. Иначе — то же ShortString получается.
Кстати, никак не могу получить строку без завершающего нуля из литерала... И мне кажется, что его добавление само по себе было б вполне оправданно — чтобы быстрей работали конструкции вида PChar('lalala')...
Добавлено спустя 1 минуту 21 секунду:Иван Шихалев писал(а):Ну, я почти так и написал...
Ан нет, сорри, буду исправлять.
Добавлено спустя 59 минут 25 секунд:Уточнил про ассемблер и UnicodeString, добавил предупреждение о том, что внутренние представления могут меняться, и полагаться на них нельзя...
Добавлено спустя 3 минуты 20 секунд:PS. Кстати, интересно, что литералы ShortString помещаются в секцию .rodata, тогда как UnicodeString — в .data. Хотя оно и логично — сама-то строка меняться не будет, а вот счетчик ссылок...