Реализация «отличной» идеи Главная страница сайта Об авторах сайта Контакты сайта Краткие содержания, сочинения и рефераты

Реализация «отличной» идеи


.

Читать реферат для студентов

Сопоставление поля CRITICAL_SECTION (которое занимает примерно 24 байта в 32-разрядных системах и около 40 байт в 64-разрядных) с каждым объектом в куче довольно расточительно, особенно если для большинства объектов никогда не требуется безопасный доступ. Чтобы снизить расходование памяти, команда разработчиков CLR использует более эффективный способ предоставления только что описанной функциональности. Вот как это работает: при инициализации CLR выделяется память под массив блоков синхронизации. Блок синхронизации — это участок памяти, который можно связать с объектом. Каждый блок синхронизации содержит те же поля, что и Win32-структура CRITICAL_SECTION.

При создании объекта в куче, с ним связываются два дополнительных служебных поля. Первое служебное поле, указатель на объект-тип, содержит адрес памяти, по которому находится объект-тип типа. Второе служебное поле, индекс блока синхронизации, содержит целочисленный индекс блока в массиве блоков синхронизации.

При конструировании объекта индекс блока синхронизации получает отрицательное значение, указывающее, что нет блока синхронизации, поставленного в соответствие объекту. Затем, когда вызывается метод для входа в блок синхронизации объекта, CLR находит в массиве свободный блок синхронизации и задает индексу блока синхронизации объекта значение, соответствующее найденному блоку. Иначе говоря, блоки синхронизации связываются с объектами прямо во время выполнения. После того как все потоки освобождают блок синхронизации объекта, индекс блока синхронизации опять получает отрицательное значение, чтобы считаться свободным, и может связываться с другим объектом. На рис. 24-1 этот процесс показан наглядно.

Логически у каждого объекта в куче есть связанный с ним блок синхронизации, который можно использовать для быстрой синхронизации потоков. Однако физически структуры блоков синхронизации связываются с объектом только по необходимости, а когда эта необходимость отпадает, привязка снимается. Это обеспечивает эффективность использования памяти. Кстати, при необходимости в массиве блоков синхронизации могут создаваться дополнительные блоки, поэтому не стоит беспокоиться, что системе может не хватить блоков, если потребуется синхронизировать много объектов.

Рис. 24-1. Индекс блока синхронизации объектов в куче (включая объекты типов) может ссылаться на запись в массиве блоков синхронизации CLR


Другие страницы сайта


Для Вас подготовлен образовательный материал Реализация «отличной» идеи

5 stars - based on 220 reviews 5
  • В каких случаях совершается 201 страница
  • Хозяйственные товарищества. Полное товарищество: Полным признается такое хозяйственное товарищество, участники которого, во-первых
  • АНАЛИЗ ПРОСТРАНСТВЕННОСТИ (И ВРЕМЕНИ) В ХУДОЖЕСТВЕННО–ИЗОБРАЗИТЕЛЬНЫХ ПРОИЗВЕДЕНИЯХ 1 страница
  • В каких случаях совершается 203 страница
  • В каких случаях совершается 205 страница
  • ДВУКЛЕТОЧНАЯ ТЕОРИЯ СИНТЕЗА ЭСТРОГЕНОВ ЭТО
  • Аменорея
  • Анализ ваших снов