spamsink: (Default)
[personal profile] spamsink


Сегодня провел весь день, копаясь в окаменевшем дерьме индийском коде, тратившем невообразимое количество памяти. Тест, который по идее должен был помещаться в 4 Гб, чуть не поставил раком мою 8 Гб машину (хорошо, я успел сделать ctrl-alt-F1 при первых симптомах, и убить процесс из текстового режима). На 32 Гб машине выяснилось, что процесс хочет 9 Гб с гаком.
Помимо прочего, в коде содержалась конструкция типа
const char * name = obj->getName();
if (obj->isArrayElt()) {
   name = obj->getParent()->getName();
   idx = obj->getIndex();
}

Фишка в том, что это была не протечка, и valgrind, запущенный на весь процесс от начала до конца, не жаловался - строки, возвращаемые из getName(), в конце концов[weasel words] зачищались, но никому не нужных уникальных строк вида "array[index]" это дело порождало , задирая пиковое потребление памяти до небес, столько, что можно было диву даться.

А потом уже одно к одному: оказалось, что хешировать по имени объекта в том месте было вообще необязательно. В результате к концу дня практически вписался в желаемые 4 Гб.
Page generated Mar. 6th, 2026 04:09 am
Powered by Dreamwidth Studios