Как стать автором
Обновить
227
-2
Борис Муратшин @zzeng

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

Отправить сообщение

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

Время на прочтение11 мин
Количество просмотров22K

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

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

Читать далее
Всего голосов 104: ↑103 и ↓1+102
Комментарии31

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

Время на прочтение60 мин
Количество просмотров29K

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

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

Читать далее
Всего голосов 141: ↑141 и ↓0+141
Комментарии55

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

Время на прочтение11 мин
Количество просмотров11K

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

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

Читать далее
Всего голосов 42: ↑42 и ↓0+42
Комментарии15

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

Время на прочтение9 мин
Количество просмотров5.2K
image
Хвостом будем считать череду структур к западу от центральной кардиоиды вдоль по отрицательной части вещественной оси. В этой области таится целая бездна деталей. А в деталях, как известно, кроется дьявол … и его малютки.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии7

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

Время на прочтение5 мин
Количество просмотров7.3K
image

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

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

Время на прочтение5 мин
Количество просмотров30K
Оболочка Мандельброта


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

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

Время на прочтение11 мин
Количество просмотров12K

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

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

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

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

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

Время на прочтение15 мин
Количество просмотров7.9K

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

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

Время на прочтение3 мин
Количество просмотров13K

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

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

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

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

Время на прочтение9 мин
Количество просмотров15K

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

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

Время на прочтение7 мин
Количество просмотров2.7K

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

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

И конечно же возник вопрос, нет ли альтернативных решений, … вот что если …
Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии14

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

Время на прочтение17 мин
Количество просмотров5.8K

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

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

Время на прочтение13 мин
Количество просмотров9.6K
image

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

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

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

Время на прочтение7 мин
Количество просмотров28K

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

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

Время на прочтение9 мин
Количество просмотров17K

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

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

Время на прочтение7 мин
Количество просмотров5.5K


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

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

Время на прочтение5 мин
Количество просмотров5.8K

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

Z-order в 8D

Время на прочтение5 мин
Количество просмотров4.1K

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

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

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

Время на прочтение20 мин
Количество просмотров8.7K

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

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

Время на прочтение13 мин
Количество просмотров46K


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

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

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Зарегистрирован
Активность