ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
649676 Топик полностью
fk0, легенда (29.01.2016 11:56 - 12:01, просмотров: 61) ответил =L.A.= на Расскажите поподробней о мощах этой "штуки".
Тебе нужен массив памяти неизвестной заранее длины... Очевидно же. Ты конечно можешь сразу выделить максимальной длины. Но алгоритм может быть рекурсивным --> и с таким подходом рекурсия быстро упрётся в конец стека. Причём рекурсия может быть не непосредственной. И непонятно, что значит "максимальная длина". Чем она определяется и как рассчитать её на этапе компиляции. Оно может от входных данных зависеть. Практически использовал такое в алгоритме, который логи в рантайме (в момент выпечатывания) анализирует, чтоб выкинуть очень часто повторяющиеся "похожие" (методом оценки дистанции Левенштейна) строки, ибо из-за них логи трудно невозможно читать, когда пара-тройка дурных сообщений через каждые три строки. Ещё массивы переменной длины или alloca() удобно использовать когда не хочется по каким-либо причинам связываться с malloc() (и когда память на выходе из функции всё равно высвобождается). Причины могут быть разнообразные: malloc может выполняться медленно, может встать на мьютексе, свободной памяти может просто не быть в наличии... Ещё LightElf здесь изобретал недо-ОС на базе alloca + setjmp: http://caxapa.ru/629075.html?todo=full -- вроде увенчалось успехом (причём вывернулся даже без alloca).
[ZX]