Есть ли реальное увеличение производительности, когда я выключаю {$ IMPORTEDDATA}? - PullRequest
5 голосов
/ 01 июня 2011

Есть ли реальный прирост производительности, когда я выключаю {$ IMPORTEDDATA}?

В manual говорится только следующее: «Директива {$ G-} запрещает создание импортированных ссылок на данные. Использование {$ G-} повышает эффективность доступа к памяти, но не позволяет упакованному блоку, где это происходит, ссылаться на переменные в других пакетах. "


Обновление:

Дополнительная информацияЯ мог бы найти:

"В разделе« Отладка »появилась новая опция« Использовать ссылки на импортированные данные (сопоставленные с $ G) », которая контролирует создание ссылок на импортированные данные (повышает эффективность памяти, но предотвращает доступ к глобальным переменным, определеннымдругие пакеты времени выполнения) "

1 Ответ

4 голосов
/ 01 июня 2011

Почти никогда

Эта директива относится только к доступу к глобальным переменным модуля из другого модуля.

Если вы используете {$ G +}

unit1;

interface

var
  Global1: integer;   //<--  this is a global var in unit1.
  Form1: TForm1;      //<--  also a global var, but really a pointer

Global1 будет доступен косвенно через указатель (если и когда будет получен доступ извне устройства 1)
Form1 также будет доступен косвенно (то есть изменение от прямогоуказатель на косвенный указатель).

если вы используете {$ G-}, доступ к целому числу global будет прямым и, следовательно, немного быстрее.

Это будет иметь значение только в том случае, еслиВы используете глобальные переменные общедоступных единиц в другом модуле и во временном коде, то есть почти никогда.

См. эту статью: http://hallvards.blogspot.com/2006/09/hack13-access-globals-faster.html

...