Здравствуйте, madprogrammer., Вы писали:
M>Здравствуйте, vsb, Вы писали:
vsb>>Здравствуйте, madprogrammer., Вы писали:
M>>>Привет!
M>>>Есть прога на С++ под Linux (gcc). При работе она через некоторое время "съедает" всю виртуальную память (как я понял) — 3060 Мб, после чего
M>>>странным образом зависает. bad_alloc-ов ниоткуда не кидается, физической памяти, судя по top, она занимает всего 0.6%.
M>>>Как понять откуда растут ноги?
vsb>>malloc реально не выделяет память, она выделяется при попытке чтения/записи, поэтому ситуация с тремя гигабайтами виртуальной памяти и небольшим количеством реально используемой возможна.
vsb>>Где она зависает — выясняйте отладчиком.
M>Выяснилось, что "утекающая" виртуальная память появляется каждый раз при создании нового потока с помощью pthread_create(). При этом утекает 8 Мб (предположительно, стек).
M>Поток в последствии успешно завершается, однако виртуальная память не высвобождается. Как лечить, не подскажете? Идея самостоятельного управления стеком потока рассматривается
M>в последнюю очередь
Проблема решилась. Нужно было явно создавать поток с флагом PTHREAD_CREATE_DETACHED (по-умолчанию создается с PTHREAD_CREATE_JOINABLE).