Имеют ли переменные класса Delphi глобальное или потоковое локальное хранилище?
-
09-06-2019 - |
Вопрос
Я предполагаю, что переменные класса ("class var") действительно глобальны в хранилище (то есть один экземпляр для всего приложения).
Но мне интересно, так ли это, или это поток в хранилище (например, аналогичный "threadvar'у") - один экземпляр на поток.
Кто-нибудь знает?
Редактировать:изменил "область действия" на "хранилище", поскольку это на самом деле правильная терминология, и то, что мне нужно (спасибо, Барри)
Решение
Да, переменные класса имеют глобальную область действия.Посмотрите в исходном коде RTL подробную информацию о том, как реализованы threadvars.В Win32 каждому потоку может быть автоматически выделен блок памяти при создании потока.Эта дополнительная область данных используется для хранения ваших потоков.
Другие советы
Переменные класса ограничены в соответствии с атрибутами видимости их членов и имеют глобальное хранилище, а не хранилище потоков.
Область видимости - это синтаксическое понятие, которое относится к тому, какие идентификаторы видны откуда.Здесь речь идет о хранении переменной.
Переменные класса - это точно так же, как классы:глобальный и уникальный для данного приложения.