green_fr: (Default)
green_fr ([personal profile] green_fr) wrote2018-01-17 09:42 am

Оптимизация кода

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

Сегодня просматриваю написанный им код. В одном месте ему нужна переменная, которую он запишет в Excel. Размер заранее посчитать нетривиально. Преаллокация на 500000 (пятьсот тысяч) строк, из которых реально заполняется две с чем-то тысячи. Команда записи этой матрицы в Excel рушит мой комп...

[identity profile] grave--digger.livejournal.com 2018-01-17 09:19 am (UTC)(link)
Какой хороший человек, однако! :)
Edited 2018-01-17 09:20 (UTC)

[identity profile] birdwatcher.livejournal.com 2018-01-17 09:38 am (UTC)(link)
Я думаю, в следующих версиях матлаба это неудобство исправят и перейдут на ленивую преаллокацию: будут на требование зарезервировать 500000 строк ничего не делать и мгновенно возвращать успех; а потом внутри по мере надобности добавлять по одной строчке.

[identity profile] muh2.livejournal.com 2018-01-17 11:00 am (UTC)(link)
Что такое строчка?

А то 5е5 указателей зарезервировать - не проблема. Если честно, то и 5е5 256 байтных строк - тоже не проблема.

[identity profile] fima.livejournal.com 2018-01-17 07:20 pm (UTC)(link)
едва ли матлаб так работает. или я значительно преувеличиваю умственные способности разработчиков.

[identity profile] zlyuk.livejournal.com 2018-01-18 04:24 pm (UTC)(link)

есть такая старинная русская пословица: заставь дурака строить таблицу...


разве таблицы в несколько тысяч строк так ощутимо тормозят матлаб,что это имеет смысл?