Telegram Group & Telegram Channel
Тут недавно один юный компиляторщик у видел у нас в рантайме название BIBOB и очень смеялся необычно звучащему для него слову: "что это за названия у вас в рантайме такие смешные?"

Но для рантаймщика то это звучит вполне естественно, это один из самых базовых терминов. Наверное и вы, читатели, если когда-нибудь занимались управлением памятью в виртуальных машинах, узнали здесь небольшую модификацию классической техники BIBOP (BIg Bag Of Pages), которая представляет из себя довольно простую штуку.

В рантайме по любому объекту в памяти нужно уметь быстро понимать его свойства, при том, как instance-специфичные (самое простое: помечен он сейчас GC-ом или нет? Хэшировали уже объект или нет?), так и class-специфичные (это массив или нет? у класса есть нетривиальный финализатор или нет? Размер объекта какой?). И если для instance-специфичной информации в объекте обычно зарезервировано несколько байт в заголовке (за битики в этом заголовке идет настоящая битва, всем надо), то class-специфичная информация обычно хранится отдельно. Для доступа к ней в объект записывают адрес на соответствующую рантайм структуру, в хотспоте, например, это Klass*.

Но это же получается целое поле под этот адрес для метаинфы в каждом объекте хранить! Объектов миллионы, дороговато получается, дороговато. В общем случае в современных языках этого не избежать, но в некоторых частных случаях может захотеться иметь альтернативный способ получения этой метаинформации об объектах. И тут срабатывает классический трюк: давайте кодировать информацию в адресах объектов. Я сейчас не про то, чтобы записывать что-то в старшие биты адреса и потом маркировать (так тоже делают, конечно, но это скорее instance- или даже pointer-специфичная инфа), а про то, чтобы использовать сам адрес для быстрого поиска нужной вам информации: давайте аллоцировать все объекты с одинаковыми свойствами (например, массивы) рядом, в заранее известных регионах памяти. Тогда вы за пару сдвигов сможете понять по адресу объекта, в каком он регионе и соответственно получить всю необходимую метаинфу.

Если чуть обобщить, то вы просто делаете хэш-таблицу из адресов в объектов в метаинфу, что освобождает вас от необходимости хранить адрес на метаинфу в каждом объекте (но накладывает ограничение на аллокации и перемещения объектов, трейдоф понятен). Вот такая техника и называется BIBOP (BIg Bag Of Pages). Pages там, понятно, из-за того, что обычно хранится информация не конкретно об объекте, а о страничке, в которой он (и похожие на него объекты) аллоцирован.

У нас в рантайме используется похожая техника, но не для конкретных объектов, а для наших собственных блоков памяти (поэтому вместо Pages, у нас Blocks, и аббревиатура превращается в BIBOB).

Забавно, что техника BIBOP один из первых раз описана была в 1977 году, вот здесь, для реализации MacLisp на PDP-10. Хотя даже там автор уже подтрунивает на самим термином и говорит, что так уже называют схему, когда новые страницы под данные выделяют с верхних адресов к нижним, а код, наоборот, загружают в нижние адреса. И вот дырка в середине, которую с двух сторон съедают во время исполнения, называется "BIg Bag of Pages" (автор использует словосочетание "whimsically named"), поэтому и схему с аллокацией объектов вместе и кодированием метаинфы в адресах автор тоже решил назвать BIBOP.



В общем, это настолько древняя (почти 50 лет!) и понятная технология, что слово BIBOP не звучит для рантаймщика, как что-то странное, совершенно.

Но я же недавно посмотрел Сowboy Bebop! А дальше уже просто не смог удержаться: пошел и подписал к комменту над нашим бибопом одну строчку в качестве шалости. See you, space cowboys.

#дух_машины



group-telegram.com/gdb_dbg/653
Create:
Last Update:

Тут недавно один юный компиляторщик у видел у нас в рантайме название BIBOB и очень смеялся необычно звучащему для него слову: "что это за названия у вас в рантайме такие смешные?"

Но для рантаймщика то это звучит вполне естественно, это один из самых базовых терминов. Наверное и вы, читатели, если когда-нибудь занимались управлением памятью в виртуальных машинах, узнали здесь небольшую модификацию классической техники BIBOP (BIg Bag Of Pages), которая представляет из себя довольно простую штуку.

В рантайме по любому объекту в памяти нужно уметь быстро понимать его свойства, при том, как instance-специфичные (самое простое: помечен он сейчас GC-ом или нет? Хэшировали уже объект или нет?), так и class-специфичные (это массив или нет? у класса есть нетривиальный финализатор или нет? Размер объекта какой?). И если для instance-специфичной информации в объекте обычно зарезервировано несколько байт в заголовке (за битики в этом заголовке идет настоящая битва, всем надо), то class-специфичная информация обычно хранится отдельно. Для доступа к ней в объект записывают адрес на соответствующую рантайм структуру, в хотспоте, например, это Klass*.

Но это же получается целое поле под этот адрес для метаинфы в каждом объекте хранить! Объектов миллионы, дороговато получается, дороговато. В общем случае в современных языках этого не избежать, но в некоторых частных случаях может захотеться иметь альтернативный способ получения этой метаинформации об объектах. И тут срабатывает классический трюк: давайте кодировать информацию в адресах объектов. Я сейчас не про то, чтобы записывать что-то в старшие биты адреса и потом маркировать (так тоже делают, конечно, но это скорее instance- или даже pointer-специфичная инфа), а про то, чтобы использовать сам адрес для быстрого поиска нужной вам информации: давайте аллоцировать все объекты с одинаковыми свойствами (например, массивы) рядом, в заранее известных регионах памяти. Тогда вы за пару сдвигов сможете понять по адресу объекта, в каком он регионе и соответственно получить всю необходимую метаинфу.

Если чуть обобщить, то вы просто делаете хэш-таблицу из адресов в объектов в метаинфу, что освобождает вас от необходимости хранить адрес на метаинфу в каждом объекте (но накладывает ограничение на аллокации и перемещения объектов, трейдоф понятен). Вот такая техника и называется BIBOP (BIg Bag Of Pages). Pages там, понятно, из-за того, что обычно хранится информация не конкретно об объекте, а о страничке, в которой он (и похожие на него объекты) аллоцирован.

У нас в рантайме используется похожая техника, но не для конкретных объектов, а для наших собственных блоков памяти (поэтому вместо Pages, у нас Blocks, и аббревиатура превращается в BIBOB).

Забавно, что техника BIBOP один из первых раз описана была в 1977 году, вот здесь, для реализации MacLisp на PDP-10. Хотя даже там автор уже подтрунивает на самим термином и говорит, что так уже называют схему, когда новые страницы под данные выделяют с верхних адресов к нижним, а код, наоборот, загружают в нижние адреса. И вот дырка в середине, которую с двух сторон съедают во время исполнения, называется "BIg Bag of Pages" (автор использует словосочетание "whimsically named"), поэтому и схему с аллокацией объектов вместе и кодированием метаинфы в адресах автор тоже решил назвать BIBOP.



В общем, это настолько древняя (почти 50 лет!) и понятная технология, что слово BIBOP не звучит для рантаймщика, как что-то странное, совершенно.

Но я же недавно посмотрел Сowboy Bebop! А дальше уже просто не смог удержаться: пошел и подписал к комменту над нашим бибопом одну строчку в качестве шалости. See you, space cowboys.

#дух_машины

BY Алло, это отладочная?




Share with your friend now:
group-telegram.com/gdb_dbg/653

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

NEWS For tech stocks, “the main thing is yields,” Essaye said. In 2018, Russia banned Telegram although it reversed the prohibition two years later. In view of this, the regulator has cautioned investors not to rely on such investment tips / advice received through social media platforms. It has also said investors should exercise utmost caution while taking investment decisions while dealing in the securities market. On Feb. 27, however, he admitted from his Russian-language account that "Telegram channels are increasingly becoming a source of unverified information related to Ukrainian events."
from sg


Telegram Алло, это отладочная?
FROM American