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: |

In December 2021, Sebi officials had conducted a search and seizure operation at the premises of certain persons carrying out similar manipulative activities through Telegram channels. The regulator took order for the search and seizure operation from Judge Purushottam B Jadhav, Sebi Special Judge / Additional Sessions Judge. "He has to start being more proactive and to find a real solution to this situation, not stay in standby without interfering. It's a very irresponsible position from the owner of Telegram," she said. On Telegram’s website, it says that Pavel Durov “supports Telegram financially and ideologically while Nikolai (Duvov)’s input is technological.” Currently, the Telegram team is based in Dubai, having moved around from Berlin, London and Singapore after departing Russia. Meanwhile, the company which owns Telegram is registered in the British Virgin Islands. Asked about its stance on disinformation, Telegram spokesperson Remi Vaughn told AFP: "As noted by our CEO, the sheer volume of information being shared on channels makes it extremely difficult to verify, so it's important that users double-check what they read."
from us


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