Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Не могу понять/нарыть объяснение в потере памяти при использовании malloc в функции, находящейстя в динамически загружаемой библиотеке. Код: plaintext 1. 2. Код: plaintext 1. 2. Псевдокод Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. var.1 top: Код: plaintext 1. 2. 3. var.2 top: Код: plaintext 1. 2. 3. cat /proc/26596/smaps: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Т.е. при запуске второго варианта функции потока, при использовании malloc откуда-то/почему-то появляется блок памяти в 65 мегабайт. Перерыл всё, нашёл здесь , что использование malloc/calloc/free в shared library безопасно. Но что происходит понять не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 14:03 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Вай, сделал цикл бесконечным :) Отвечать буду позже, надо срочно отъехать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 14:08 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fпри использовании malloc откуда-то/почему-то появляется блок памяти в 65 мегабайт. Это "куча". Она мелкими дозами не выделяется. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 14:30 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Готов согласиться, но если запустить второй, третий, четвертый потоки, идентичные нашему первому, они все будут отжирать по 65 мег + стек. Казалось бы, "65 мегабайт хватит всем". Имхо, это не дело и должно быть решаемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 17:58 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
И, почему в main malloc не выделяет на 100 байт 65 мегабайт? Или, как тогда сказать потоку выделять память в общей куче (ведь, насколько я знаю, эта куча и так общая для main и для db_thread)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 18:00 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fесли запустить второй, третий, четвертый потоки, идентичные нашему первому, они все будут отжирать по 65 мег + стек. Чем докажешь? Andrej_fпочему в main malloc не выделяет на 100 байт 65 мегабайт? Потому что у тебя в main() нет вызова malloc(). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 18:07 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Дмитрий. Искренне радуюсь за вас! Классный профессионал, который без "позерства" помогает другим - просто замечательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 18:43 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПотому что у тебя в main() нет вызова malloc().Дмитрий, вы издеваетесь что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 18:51 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fДмитрий, вы издеваетесь что ли? Вот твой main(), строки пронумерованы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Назови мне номер строки с вызовом malloc(), поскольку я его в упор не вижу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:03 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, я прошу вас помогать автору а не заниматься обструкцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:14 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_f Код: plaintext 1. 2. 3. 4. Скорее всего так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:31 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
maytonя прошу вас помогать автору Я пытаюсь. Но я действительно стар и подслеповат, поэтому действительно не вижу вызова malloc() в приведённой автором main().. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:32 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fТ.е. при запуске второго варианта функции потока, при использовании malloc откуда-то/почему-то появляется блок памяти в 65 мегабайт.Ну так судя по коду у вас в while(i<10){ бесконечный цикл ... Нет инкремента переменной i. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:41 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Гм. Оказывается автор поста в своем втором message уже понял причину утечки памяти. Sorry за свои не нужные messges. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:44 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Владимир2012Оказывается автор поста в своем втором message уже понял причину утечки памяти. Обычно бесконечный цикл не приводит к утечкам памяти, если у него внутри нет выделения памяти. А у автора в цикле только sleep(). sleep(), насколько я знаю, память не выделяет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:47 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОбычно бесконечный цикл не приводит к утечкам памяти, если у него внутри нет выделения памяти. А у автора в цикле только sleep(). sleep(), насколько я знаю, память не выделяет.Судя по коду во во втором thread запрошенная память освобождается. Но цикл то у него бесконечный! Честно говоря не знаю как Linux создает нити, выделяет для них память ... /скорее всего какие-то ньюансы имеются/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 19:59 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Просвещаюсь: Процессы и нити в ОС Linux http://uinc.ru/articles/34/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 20:03 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Владимир2012Судя по коду во во втором thread запрошенная память освобождается. Но цикл то у него бесконечный! И? Какое отношение бесконечный ничего не делающий цикл в одном потоке имеет к выделению памяти в совершенно другом потоке? Чтобы mayton не ругался, немного ликбеза: Я не знаю деталей работы менеджера памяти в GLIBC, поэтому предполагаю, что он ленивый и умный. Поэтому он не создаёт кучу до первого к ней обращения и не уничтожает её после полного освобождения. Возможно, он очень умный и создаёт отдельную кучу на каждый загруженный модуль чтобы при его выгрузке можно было освободить всю выделенную память и предотвратить забитие адресного пространства утекшей памятью. Возможно, он ещё и очень хитрый, поэтому создаёт отдельные кучи для отдельных потоков в надежде, что они будут обращаться в основном к "своей" куче и сэкономят ему время ожидания мутекса для сериализации доступа к куче. Но, как бы то ни было, при создании кучи идёт выделение исключительно виртуальной памяти и никакой резервации физической. О чём и говорят цифры в стартовом посте. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 20:08 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Если .SO собрана со статическим рантаймом, то у нее будет своя куча. Причем не только куча, но и все остальные структуры рантайма. Кстати, вполне вероятно, что память занимает вовсе не куча. Чтобы увидеть выделения памяти запустите программу в strace. Там среди прочих mmap будет и создание кучи. А вообще, было бы неплохо приводить минимальный, но реально запускавшийся код, а не какие-то наброски от руки, которые работают только с ваших слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 20:09 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Просьба автора topic показать cat /proc/26820/smaps ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 20:23 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
/proc/[pid]/smaps to get an idea of the memory footprint of the process. proc - process information pseudo-filesystem http://man7.org/linux/man-pages/man5/proc.5.html До конца не разобрался, но похоже на то, что Size: 65404 kB это размер памяти, выделенный процессу PS: Бесконечный цикл не причем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:01 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Вообщем вот ответ: However, one counter-example occurs on PPC64 kernels whereby a kernel using 64K as a base page size still use 4K pages for the MMU on older processors. To, this patch reports "MMUPageSize" as the page size by the MMU. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:15 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Проще говоря. Ни какой утечки памяти у автора топика нет. while подправит и example будет работать корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:25 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь. Про цикл - приведенный здесь код есть псевдокод - выдранный из реального текста кусок, забыл написать i++ в цикле, но к вопросу это отношение не имеет. В моём случае есть полурешение - вместо malloc использовать alloca, который выделяет память в стеке. С переменными это прокатывает и лишних блоков в 65 мег. нет, главное следить за размером переменных. А вот что делать, например, с функциями типа PQconnectdb, которые возвращают указатель, создаваемый ими самими, я пока не знаю. Буду думать завтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:32 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fА вот что делать, например, с функциями типа PQconnectdb, которые возвращают указатель, создаваемый ими самими, я пока не знаю. Буду думать завтра.Без обид. Ваши ошибки - наши знания. Пишите. Поможем чем можем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:36 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39279184&tid=2018457]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 186ms |

| 0 / 0 |
