Delphi 2010, встраивая бесполезный?

Существует немного поставщиков услуг JNDI для работы с реестром окон.

можно было наблюдать http://java.sun.com/products/jndi/serviceproviders.html .

5
задан RRUZ 25 April 2011 в 02:18
поделиться

4 ответа

Есть опция компилятора для автоматического встраивания коротких подпрограмм. В параметрах проекта в разделе «Компилятор Delphi -> Компиляция -> Создание кода» установите для параметра «Контроль встраивания кода» значение «Авто». Однако имейте в виду, что это должно быть только в сборке релиза, поскольку встроенный код трудно отлаживать.

Кроме того, вы сказали, что не возражаете против увеличения размера своей программы, если она станет быстрее, но это часто встраивание делает его медленнее. Вы должны знать, что это может быть связано. Чем больше ваш скомпилированный код, тем больше у вас будет промахов в кэше инструкций, что замедлит выполнение.

Если вы действительно хотите ускорить вашу программу, запустите ее через профилировщик. Я рекомендую Sampling Profiler , который является бесплатным, предназначен для работы с кодом Delphi (включая 2010) и не работает. t замедлить исполнение. Он покажет вам подробный отчет о том, на выполнение какого кода вы фактически тратите больше всего времени. Как только вы это обнаружите, вы можете сосредоточиться на узких местах и ​​попытаться их оптимизировать.

11
ответ дан 18 December 2019 в 11:57
поделиться

В некоторых случаях встраивание может замедлить работу. Встроенная функция может увеличить количество регистров ЦП, необходимых для локальных переменных. Если не хватает регистров, доступные переменные вместо этого будут размещены в памяти, что замедлит работу.

Если функция не встроена, у нее будут (почти) все регистры процессора.

Я обнаружил, что это обычно не рекомендуется встраивать функции, содержащие циклы. Они будут использовать пару переменных, которые, вероятно, останутся в памяти, что замедлит встроенный код.

3
ответ дан 18 December 2019 в 11:57
поделиться

Если я правильно понял одну из разработок компилятора FPC (которая имеет ту же проблему), встраивание может произойти только тогда, когда подпрограмма, которая будет встроена, уже скомпилирована.

IOW, если вы сделаете unit с встроенными функциями как "листовой" блок, и поместите его первым в разделе uses вашего проекта (.dpr), все должно быть в порядке. Обратите внимание, что под «листовым» модулем я подразумеваю модуль, который не зависит от других модулей в проекте, то есть только от уже скомпилированных модулей.

Я не удивлюсь, что в Delphi было то же самое, поскольку он разделяет система единиц, основанная на тех же принципах.

Она также довольно не исправима без нарушения отдельных принципов компиляции.

0
ответ дан 18 December 2019 в 11:57
поделиться

If you want to force inlining then use include files. You need to make sure you declare the correct variables, and then use {$I filename.inc}. That will always inject that specific code right where you want it, and make it easier to maintain if you need to change it.

Keep in mind that the compiler is written by people way smarter then most mere mortals (including myself) and has access to more information when deciding to inline or not, so when it doesn't inline it probably has a good reason.

1
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

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