Функция void *thread(void* param) не выполняет ничего. Сразу завершается.
В общем, я уверен, что утечка происходит при вызове pthread_create().
В чем тут может быть дело?
Заранее спасибо.
hdg700 wrote: > Функция void *thread(void* param) не выполняет ничего. Сразу завершается. > В общем, я уверен, что утечка происходит при вызове pthread_create(). > В чем тут может быть дело? > Заранее спасибо.
ты не выполняешь необходимого действия для завершения потока
читай man pthread_join
> hdg700 wrote: >> Функция void *thread(void* param) не выполняет ничего. Сразу завершается. >> В общем, я уверен, что утечка происходит при вызове pthread_create(). >> В чем тут может быть дело? >> Заранее спасибо.
аааа, стоп
сразу не углядел, у тебя он в детачед стейт...
Здравствуйте, _kostet_, Вы писали:
__>аааа, стоп __>сразу не углядел, у тебя он в детачед стейт...
Вот в том то и дело, что детачед.
mtrace() показывает, что внутри самой функции thread() память не выделяется.
Память выделяется именно при вызове pthread_create().
Может, память выделяется под стек потока?
Или у меня какая-то косячная реализация библиотеки pthread?
или еще что-нибудь.... подскажите.. я уже не знаю, куда копать.
Здравствуйте, hdg700, Вы писали:
H>В общем, я уверен, что утечка происходит при вызове pthread_create().
Утечка происходит при каждом вызове pthread_create() или единожды? Попробуйте вызвать ее несколько раз в цикле.
Может это какая-нибудь отложенная инициализация nptl.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, ДимДимыч, Вы писали:
ДД>Утечка происходит при каждом вызове pthread_create() или единожды? Попробуйте вызвать ее несколько раз в цикле. ДД>Может это какая-нибудь отложенная инициализация nptl.
Да, утечка происходит при каждом вызове pthread_create() из любого места программы.
Каждый раз занимается по 10 мегабайт памяти..
Здравствуйте, hdg700, Вы писали:
H>Здравствуйте, ДимДимыч, Вы писали:
ДД>>Утечка происходит при каждом вызове pthread_create() или единожды? Попробуйте вызвать ее несколько раз в цикле. ДД>>Может это какая-нибудь отложенная инициализация nptl.
H>Да, утечка происходит при каждом вызове pthread_create() из любого места программы. H>Каждый раз занимается по 10 мегабайт памяти..
Стек потока? Попробуй поиграться с pthread_attr_getstacksize/pthread_attr_setstacksize.
Здравствуйте, _kostet_, Вы писали:
__>а что за система ? __>вообще странно это __>предлагаю погонять в цикле pthread_create под valgrind'ом и посмотреть
Система:
-bash-3.1$ cat /proc/version
Linux version 2.6.15-1.2054_FC5smp (bhcompile@hs20-bc1-3.build.redhat.com) (gcc version 4.1.0 20060304 (Red Hat 4.1.0-3))
Зачем в цикле? Зачем отслеживать?
Память кушается при каждом вызове. Когда скушанная память достигает 500 — 600 мегабайт, потоки перестают создаваться.
Я могу что-то новое узнать при отслеживании вызовов в цикле?
Здравствуйте, hdg700, Вы писали:
H>Да, утечка происходит при каждом вызове pthread_create() из любого места программы. H>Каждый раз занимается по 10 мегабайт памяти..
У меня на Вашем примере при первом pthread_create() откусывается ≈ 8 Мб виртуальной памяти, последующие вызовы на памяти не отражаются.
С какими опциями собираете, каким компилятором?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, ДимДимыч, Вы писали:
ДД>У меня на Вашем примере при первом pthread_create() откусывается 8 Мб виртуальной памяти, последующие вызовы на памяти не отражаются. ДД>С какими опциями собираете, каким компилятором?
Здравствуйте, hdg700, Вы писали:
H>Почему тогда для каждого потока у меня занова выделяется память?
У Вас выделяется физическая память или виртуальная? Если виртуальная, то может это такая стратегия аллокатора?
Дайте полный пример с запуском нескольких нитей, тогда можно будет о чем-то говорить.
H>Это может быть из-за ошибки в самой библиотеке? Может, попробовать обновить ее?
Все может быть.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, ДимДимыч, Вы писали:
ДД>У Вас выделяется физическая память или виртуальная? Если виртуальная, то может это такая стратегия аллокатора?
Выделяется виртуальная. Хреновая какая-то стратегия.. мне не нравится..
ДД>Дайте полный пример с запуском нескольких нитей, тогда можно будет о чем-то говорить.
Просто в программе таким же образом, как я уже показывал, создаются потоки.