В данной статье приведены методы, которые будут использоваться в доказательствах в
предстоящем цикле уроков по скриптингу.
Отдельная тема нужна для того, чтобы не засорять пояснениями другие статьи и при этом развёрнуто описать каждый из приёмов.
Касаемо pawn.cfg, ключи компилятора записываются в нём в одну строку через пробел (пример: -d0 -O2 -v2).
1. Получение ассемблерного листинга.
В папке с компилятором создайте файл "pawn.cfg". В этот файл можно вписать параметры командной строки для компилятора. Впишите в файл "-a" (без кавычек) и сохраните.
Компилятор при запуске откроет pawn.cfg и, найдя ключ "-a" сгенерирует ассемблерный листинг (*.asm) из файла *.pwn (при этом файл *.amx создан не будет!)
Также можно дизассемблировать уже готовый файл *.amx, использовав утилиту pawndisasm. Этой утилиты нет в стандартном комплекте сервера SA:MP для Windows (равно как и нет в стандартной сборке Pawn 3.2.3664 - она была бэкпортирована из 3.3.3875), но она есть в модифицированной версии компилятора от Zeex.
Благодаря этому приёму можно узнать, во что превратится исходный код после компиляции и судить о целесообразности тех или иных вариантов кода.
2. Профилирование.
Профилирование (в информатике) - сбор характеристик работы программы.
Не так давно я выкладывал
профайлер для измерения времени выполнения двух отрывков кода на Pawn.
С его помощью также можно судить о целесообразности разных вариантов кода, сравнив их производительность.
3. Информация о требованиях к памяти.
В файле pawn.cfg добавьте ключ "-v2". Это заставит компилятор выводить подробную инфу о требованияк скрипта к памяти: объём заголовка файла *.amx, кода, данных и объём стека/кучи (как общий объём, так и используемый).
Таким образом, можно узнать, сколько памяти расходуется при использовании разных образцов кода.
4. Оптимизация генерируемого кода.
По умолчанию компилятор Pawn никак не оптимизирует генерируемый код.
Однако, в ситуациях, когда требуется оценить производительность кода, оптимизации иногда могут изменить результаты тестов. Кроме того, код после оптимизации, как правило, более компактный и его легче разбирать в ассемблерных листингах.
За оптимизацию генерируемых инструкций в компиляторе отвечает ключ -OX:
-O0 - никаких оптимизаций.
-O1 - JIT-совместимые оптимизации.
-O2 - то же самое, что в -O1, но также используются оптимизации, не совместимые с JIT.
Код, скомпилированный с ключом -O2 не запустится, если использовать плагин JIT для SA:MP, поэтому целесообразно указывать в pawn.cfg ключ -O1.
5. Удаление отладочной информации.
Ключ компилятора -dX отвечает за добавление отладочной информации:
-d0 - не добавлять отладочной информации.
-d1 - проверки времени выполнения (например, проверки на выход за пределы массивов).
-d2 - проверки времени выполнения с символьной информацией (названия функций и переменных).
-d3 - то же самое, что и -d2, но также отключает оптимизацию генерируемого кода (-O0).
Указав в pawn.cfg ключ -d0, можно убрать из кода лишние инструкции (break, bounds), что опять же может быть полезно при чтении дизассемблерных листингов.
Тема будет пополняться.