Имеют ли переменные класса Delphi глобальное или потоковое локальное хранилище?

StackOverflow https://stackoverflow.com/questions/82113

  •  09-06-2019
  •  | 
  •  

Вопрос

Я предполагаю, что переменные класса ("class var") действительно глобальны в хранилище (то есть один экземпляр для всего приложения).

Но мне интересно, так ли это, или это поток в хранилище (например, аналогичный "threadvar'у") - один экземпляр на поток.

Кто-нибудь знает?

Редактировать:изменил "область действия" на "хранилище", поскольку это на самом деле правильная терминология, и то, что мне нужно (спасибо, Барри)

Это было полезно?

Решение

Да, переменные класса имеют глобальную область действия.Посмотрите в исходном коде RTL подробную информацию о том, как реализованы threadvars.В Win32 каждому потоку может быть автоматически выделен блок памяти при создании потока.Эта дополнительная область данных используется для хранения ваших потоков.

Другие советы

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

Область видимости - это синтаксическое понятие, которое относится к тому, какие идентификаторы видны откуда.Здесь речь идет о хранении переменной.

Переменные класса - это точно так же, как классы:глобальный и уникальный для данного приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top