Задача: сделать на Си связный отсортированный список с ограниченным размером или хэш-таблицу, необходимо, что весь список занимал не более N байт в куче (стек не считается).
Реализация
Возможные варианты: 1) сделать счетчик сколько выделено и освобождено и при достижении значения не выделять больше, т.е написать враппер для malloc, calloc, realloc; 2) выделить массив нужного размера и все операции по размещению элементов делать в этом массиве, проверяя границы; 3) поискать готовое решение по реализации хэш, массивов или списков на ограниченном участке памяти.
Первый вариант неплох, второй неудобен и требует много кода и отладки, поробуем тертий.
Есть библиотека inarray-allocator(https://brepo.ru/post/inarray-allocator-hash-dinamicheskij-massiv-malloc-svyaznyj-spisok-koljcevoj-bufer-v-shared-memory-ili-v-ukazannom-massive-bajt), которая позволит реализовать такой функционал.
BayZR - утилита позволяющая собирать данные статических анализаторов кода и формировать единый отчет о результате проверки. Отчет может быть предоставлен как в кратком виде для дальнейшей его обработки, так и в расширенном виде - текст с комментариями или html формат.
BayZR прежде чем запустить анализатор кода пытается найти с какими параметрами собирается каждый файл проекта, и после этого в формате, понятном для конкретного анализатора кода, передает собранные параметры по каждому файлу.
- Подробности описания: https://brepo.ru/post/bayzr-sredstvo-kompleksnogo-staticheskogo-analiza-koda-c-c
Для работы mod_performance с любым типом php(кроме dso) необходимо использовать расширение php: modperf_ext.so. Расширение доступно в исходниках mod_performance, а так же в репозитории:
echo -e "[repomanager-bayrepo_prod]
name=bayrepo repo on repo.brepo.ru
baseurl=https://repo.brepo.ru/repo/bayre...
В этой статье не планирую ставить никакого задания. Просто буду собирать полезные сценарии из интернета и возможно - описывать свои. А так же вставлю ссылки на полезные статьи по исследованию и описанию работы некоторых функций glibc, для дальнейшей возможности обследования их через systemtap.
Сценарий 1
Интересный скрипт, позволяющий остановить выполнение программы в нужном месте и запустить gdb
Попробую написать утилитку, которая бы отслеживала путь выполнения программы, не так подробно как ltrace, но все же существенно более быстро.
А так же попробую воспользоваться функциями.
1 Напишу функцию, которая аналогична indent, но с собственным алгоритмом формирования смещения:
function local_depth() {
ind = ""
for (i=depth[tid()];i>=0;i--){
ind = sprintf("%s|", ind)
}
ind = ind . ">"
return ind
}
Результат выполения функции - это строка отступа для текущего потока с учетом глубины вложенности. Т.е сведения о глубине хранятся в массиве depth с ключем tid(), т.е идентификатором текущего потока. Результат примерно выглядит так |||>
или |||||||>