Записи с меткой «код»

Программирование на C или PHP.

Менеджер памяти MC Heappie

В наше время при разработке мало-мальски сложных проектов просто необходимо использовать динамическую память под переменные – уместиться в рамки предопределённых массивов и переменных стало просто невозможно, а динамические структуры, будь то связанные списки или деревья, являются сейчас неотъемлемой частью любой программы. В то же время стандартные средства выделения памяти в C/C++ отличаются некоторой медлительностью. Известно, что функции malloc / free очень плохо работают на большом количестве мелких переменных, а функция realloc вообще является ужасом для более-менее опытного программиста.

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

Определим круг задач и требований, которые мы предъявляем к менеджеру памяти:

1. Интерфейс менеджера должен содержать две основных функции – выделение памяти и освобождение памяти.
2. Функция выделения памяти mc_alloc () должна получать на вход размер переменной, под которую необходимо распределить место.
3. Функция освобождения памяти mc_delete () должна освобождать память по указанному адресу.
4. Менеджер памяти должен обладать универсальностью – не должно существовать ограничений на объём выделяемой памяти.
5. Объём памяти, нужный для работы самого менеджера, должен быть минимален – желательно не более 10% от размера выделяемой памяти.
6. Необходимо достигнуть производительности минимум в два раза выше, чем контроллер памяти malloc/free в C/C++.

Существует множество подходов к распределению памяти системы. Мы не будем рассматривать их все – Интернет и так кишит информацией на эту тему. Лучше перейдём напрямую к самому алгоритму менеджера памяти MC Heappie.

(далее...)

Компилятор Brainfuck

Порой преподаватели университета дают весьма интересные задания. На этот раз идеей многоуважаемого Эдуарда Эмильевича Александрова, уже натолкнувшего меня на создание менеджера памяти MC Heappie и OpenGL-генератора Landscape Winter, было создание компилятора ...
Одно "но" - разумеется, он по началу не уточнил, какого именно)
Мой хороший товарищ Тим в своё время говорил о замечательном языке программирования, который "трахает мозг" ... Полистав свою любимую Википедию, я наткнулся на крайне интересный язык программирования - Brainfuck!

Brainfuck (англ. brain мозг + fuck) — один из известнейших эзотерических языков программирования, придуман Урбаном Мюллером (Urban Muller) в 1993 году для забавы. Язык имеет восемь команд, каждая из которых записывается одним символом. Исходный код программы на Brainfuck представляет собой последовательность этих символов без какого-либо дополнительного синтаксиса.

Одним из мотивов Урбана Мюллера было создание языка с как можно меньшим компилятором. Отчасти он был вдохновлен языком FALSE, для которого существовал компилятор размера 1024 байта. Существуют компиляторы языка Brainfuck размера меньше 200 байт. Программы на языке Brainfuck писать сложно, за что его иногда называют языком для мазохистов. Но при этом важно отметить, что Brainfuck является вполне естественным, полным и простым языком и может использоваться при определении понятия вычислимости.

Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, напоминая ленту и головку машины Тьюринга. Кроме того, подразумевается устройство общения с внешним миром (см. команды . и ,) через поток ввода и поток вывода.

Подробнее о самом языке Вы можете легко почитать на соответственной страничке - Википедия - Brainfuck (ru).

(далее...)

Часы с кукушкой

Думаю, все ещё помнят такое замечетельное изобретение, как часы с кукушкой, описанные в цитате с БашОрга ( http://www.bash.org.ru/ )

x0: зобацал часы с кукушкой на серваке
x0: в cron.hourly пешу скрыпт

KUKU=`/bin/date +%I`
while [ $KUKU -gt 0 ]; do
eject /dev/cdrom
cat /root/xxx/kuku.au > /dev/dsp
eject -t /dev/cdrom
KUKU=$((KUKU-1))
done

x0: ночальнег в полдень зашел и окуел
x0: сцуко спасская биг тауэр

Проблема этих часов заключалась только в одном - они были созданы для Linux-систем, и пользователи Windows не могли похвастаться таким-вот изобретением у себя дома. От нечего делать, я решил реализовать эту же идею под Windows и разместить здесь все исходники.

(далее...)

Система статистики для squid

Не так давно пришлось мне столкнуться с одной страшной проблемой. На факультете иностранных языков, где я по несчастью работаю админом, прилось поднять систему журналирования трафика и прокси сервер. С одной стороны это, казалось бы, не так уж и сложно. Но возникла следующая проблема - к бесплатному прокси-серверу squid не удалось найти удобной и быстрой системы учёта трафика. Поэтому такую систему я написал сам, и теперь предлагаю её миру, если кому-то вдруг понадобится.

Продукт - AlterVision Squid Traffic Analizer
Платформа - любая
Реализовано на языке - php с использованием базы данных mysql
Скачать - http://www.box.net/shared/hc8w39oe8o

(далее...)

Создание ландшафта по карте высот (OpenGL)

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

Генерация ландшафта по карте высот

Генерация ландшафта по карте высот

Мы реализуем метод построения поверхности по "карте высот". Картой высот называют растровое изображение, на котором интенсивность света определяет высоту точки над некоторым нулевым уровнем.

(далее...)

Страница 4 из 41234