Pull to refresh
227
-2
Борис Муратшин @zzeng

Пользователь

Send message

Происхождение и эволюция аллокатора памяти в С

Reading time11 min
Views22K

Развитие технических конструкций или же программных систем зачастую напоминает эволюцию живых организмов. С тем отличием, что происходит быстрее и гораздо лучше задокументировано. Можно наблюдать постепенное усложнение, появление новых механизмов/алгоритмов по мере появления новых технических возможностей, комбинирование разных механизмов, исчезновение тупиковых ветвей ... В конце концов это приводит к балансу на пределе физических возможностей и, глядя на результат, уже непонятно, как вообще такое могло появиться на свет, сколько пядей во лбу требуется для общего понимания конструкции.

Аллокатор памяти в С - именно тот случай, когда при попытке ознакомиться с его современным устройством возникает стойкое желание остановиться, мысленно поблагодарить авторов и далее обращаться как с черным ящиком. Если же в читателе сильна любознательность, и/или есть желание постигнуть тайное знание, которое даст ощущение понимания странного поведения программ в нетривиальных случаях, добро пожаловать под кат.

Читать далее
Total votes 104: ↑103 and ↓1+102
Comments31

Три архитектуры эльфам, семь гномам, девять людям… где же искать ту, что объединит их все?

Reading time60 min
Views29K

Проводится сеанс разоблачения магии (CISC, RISC, OoO, VLIW, EPIC, ...).
Без традиционной рубрики “а что, если” тоже не обошлось.

Добро пожаловать под кат, правда, лёгкого чтения ожидать не стоит.

Читать далее
Total votes 141: ↑141 and ↓0+141
Comments55

4K страницы: навсегда, на веки вечные

Reading time11 min
Views11K

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

Но, "для нас нет ничего святого"(С), попробуем выяснить почему именно 4К, изменится ли что-то если сделать 8К, 64К... Зачем вообще фиксировать конкретный размер, почему не сделать страницы произвольной (в пределах разумного) длины.

Читать далее
Total votes 42: ↑42 and ↓0+42
Comments15

Как устроено множество Мандельброта. Хвост

Reading time9 min
Views5.1K
image
Хвостом будем считать череду структур к западу от центральной кардиоиды вдоль по отрицательной части вещественной оси. В этой области таится целая бездна деталей. А в деталях, как известно, кроется дьявол … и его малютки.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments7

Как устроено множество Мандельброта. Центральная кардиоида

Reading time5 min
Views7.2K
image

Хорошо известно, что центральная часть множества Мандельброта представляет из себя кардиоиду. Не просто похожа, а именно ей и является. Сегодня мы пытаемся понять, почему именно кардиоида и что из этого следует.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments13

Почему множество Мандельброта устроено так, как оно устроено

Reading time5 min
Views30K
Оболочка Мандельброта


Созерцание фракталов завораживает, особенно это относится к предмету данной статьи, который демонстрирует вдобавок ко всему еще и изрядное разнообразие. Впрочем, не менее интересно попытаться разобраться, откуда что берётся, как из одного, в сущности, (пусть и комплексного) числа рождается всё это великолепие.
Если любопытно, добро пожаловать под кат.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments5

STL, allocator, его разделяемая память и её особенности

Reading time11 min
Views11K

Разделяемая память — самый быстрый способ обмена данными между процессами. Но в отличие от потоковых механизмов (трубы, сокеты всех мастей, файловые очереди ...), здесь у программиста полная свобода действий, в результате пишут кто во что горазд.

Так и автор однажды задался мыслью, а что если … если произойдёт вырождение адресов сегментов разделяемой памяти в разных процессах. Вообще-то именно это происходит, когда процесс с разделяемой памятью делает fork, а как насчет разных процессов? Кроме того, не во всех системах есть fork.

Казалось бы, совпали адреса и что с того? Как минимум, можно пользоваться абсолютными указателями и это избавляет от кучи головной боли. Станет возможно работать со строками и контейнерами С++, сконструированными из разделяемой памяти.

Отличный, кстати, пример. Не то, чтобы автор сильно любил STL, но это возможность продемонстрировать компактный и всем понятный тест на работоспособность предлагаемой методики. Методики, позволяющей (как видится) существенно упростить и ускорить межпроцессное взаимодействие. Вот работает ли она и чем придётся заплатить, будем разбираться далее.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments2

Нерушимая память, нерушимые процессы

Reading time15 min
Views7.9K

Прочитав недавно (1, 2, 3) с каким трудом даются “космические” процессоры, невольно задался мыслью, раз “цена” за устойчивое железо настолько высока, может быть стоит сделать шаг и с другой стороны — сделать устойчивый к спецфакторам “софт”? Но не прикладной софт, а скорее среду его выполнения: компилятор, ОС. Можно ли сделать так, чтобы выполнение программы в любой момент можно было оборвать, перезагрузить систему и продолжить с того же (или почти с того же) места. Существует же в конце концов гибернация.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments25

Про геометрический смысл кодов Грея

Reading time3 min
Views13K

Коды Грея имеют близкую родственную связь с кривой Гильберта.

Впрочем, при общении с коллегами выяснилось, что эта несложная зависимость выглядит в их глазах как нечто нетривиальное. Поиск в интернетах навскидку ничего не дал кроме мутной фразы в вики: “кривые Гильберта в пространствах большей размерности являются представителями обобщений кодов Грея”. Поэтому возникло желание раскрыть тему — коротенько, простым языком.

В результате под катом — «скандалы, интриги, расследования».
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments9

Логические поля в базах данных, есть ли противоядие

Reading time9 min
Views15K

Часто в таблицах содержится большое количество логических полей, проиндексировать все из них нет возможности, да и эффективность такой индексации низка. Тем не менее, для работы с произвольными логическими выражениями в SQL пригоден механизм многомерной индексации о чем и пойдёт речь под катом.
Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments28

Расставляем стандартные ячейки (заметки постороннего)

Reading time7 min
Views2.6K

Натолкнувшись на статью “Уничтожим монополию …”, автор, как человек пусть от EDA очень далёкий, но от природы любознательный, не поленился пройтись по ссылкам и невольно поймал себя на мысли, что одно из основных технических решений — использование рядов стандартных ячеек (standard cell layout) — выглядит довольно спорно.

Да, такое расположение интуитивно понятно, ведь мы пишем и читаем похожим образом, кроме того, технологически просто располагать ячейки именно рядами, так удобно стыковать шины VDD и GND. С другой стороны, при этом возникает непростая комбинаторная задача, требуется разрезать схему на линейные куски и расположить эти куски таким образом, чтобы (грубо) минимизировать общую длину соединений.

И конечно же возник вопрос, нет ли альтернативных решений, … вот что если …
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments14

Гильберт, Лебег … и пустота

Reading time17 min
Views5.7K

Под катом исследуется вопрос, как должен быть устроен хороший алгоритм многомерной индексации. На удивление, вариантов не так уж и много.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments2

Lambda-функции в SQL… дайте подумать

Reading time13 min
Views9.6K
image

О чем будет статья, и так понятно из названия.

Кроме того, автор объяснит, зачем с его точки зрения это нужно, а также расскажет, что SUBJ не просто модная технология, но и «дело вдвойне нужное — как приятное, так и полезное».
Читать дальше →
Total votes 17: ↑13 and ↓4+9
Comments30

Колоночные СУБД против строчных, как насчет компромисса?

Reading time7 min
Views28K

Колоночные СУБД активно развивались в нулевых годах, на данный момент они нашли свою нишу и практически не конкурируют с традиционными, строчными системами. Под катом автор разбирается, возможно ли универсальное решение и насколько оно целесообразно.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments43

Кривая Гильберта vs Z-order

Reading time9 min
Views17K

Неоднократно доводилось слышать мнение, что из всех заметающих кривых. именно кривая Гильберта наиболее перспективна для пространственной индексации. Мотивируется это тем, что она не содержит разрывов и потому в некотором смысле “хорошо устроена”. Так ли это на самом деле и при чем здесь пространственная индексация, разберёмся под катом.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments20

Про интервальные индексы

Reading time7 min
Views5.5K


Под катом будем разбираться нужен ли для индексации интервалов специальный индекс, как быть с многомерными интервалами, правда ли что с 2-мерным прямоугольником можно обращаться как с 4-мерной точкой и т.д. Всё это на примере PostgreSQL.
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments0

Проекции? Hет, спасибо

Reading time5 min
Views5.8K

Под катом будет небольшая заметка о применении пространственного индекса
на основе zcurve для индексации точечных данных, расположенных на сфере. А так же bencmark-и для PostgreSQL и сравнение с таким же (но совсем другим)
индексом на R-дереве.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments2

Z-order в 8D

Reading time5 min
Views4K

Индексы на основе самоподобных заметающих кривых пригодны не только для организации поиска пространственных данных. Они работоспособны и на разнородных данных, положенных на целочисленную решетку.

Под катом мы займёмся проверкой возможности применения Z-кривой для реализации 8-мерного индекса с прицелом на куб OLAP.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments0

Про память, теги и когерентность

Reading time20 min
Views8.6K

Тегированная память (tagged architecture) даёт экзотическую возможность отделить данные от метаданных. Цена за это не столь уж и велика (на первый взгляд), а потенциальные возможности впечатляют. Под катом попробуем разобраться.
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments25

M* — алгоритм поиска кратчайшего пути, через весь мир, на смартфоне

Reading time13 min
Views46K


При поиске кратчайшего пути на графах большого размера плохо работает традиционная оценка стоимости т.к. данные заведомо не помещаются в памяти и общая стоимость больше зависит от числа обращений к диску нежели от числа просмотренных рёбер. А число дисковых операций — весьма субъективный фактор, зависимый от сложно формализуемой пригодности графа к хранению на диске в форме удобной для конкретного алгоритма. Кроме того, очень важным становится компактность — количество информации в расчете на ребро и вершину.

Под катом представлена обобщенная эвристика к алгоритму A*, полезная именно в свете практической пригодности на больших графах при ограниченных ресурсах, например, на мобилке.
Читать дальше →
Total votes 110: ↑109 and ↓1+108
Comments48

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity