Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Владимир2012However, 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. Хм. Вопрос, конечно, интересный, но 64К в 1000 раз меньше 65404 kB. Но подумать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:37 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fВопрос, конечно, интересный, но 64К в 1000 раз меньше 65404 kB. Но подумать надо.Ну загляните в исходники Linux. Здается мне в данном случае речь идет о 65404 bytes /то бишь 64К/. Хотя не уверен, что прав ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:41 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли .SO собрана со статическим рантаймом, то у нее будет своя куча. Причем не только куча, но и все остальные структуры рантайма. Кстати, вполне вероятно, что память занимает вовсе не куча. Чтобы увидеть выделения памяти запустите программу в strace. Там среди прочих mmap будет и создание кучи. А вообще, было бы неплохо приводить минимальный, но реально запускавшийся код, а не какие-то наброски от руки, которые работают только с ваших слов.Я понимаю, что реальный код лучше. Но реальный код сейчас это уже работающий демон, в сотни строк кода в каждом файле. Я могу выложить и реальный код, но он займёт несколько страниц. При этом я гарантирую, что приведённый псевдокод есть сокращение реального, просто вместо цикла (зацикленного навечно здесь) идет реальный цикл с кучей строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:42 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Вот вам отличный рессурс https://github.com/krf/dotfiles/ My dotfiles http://kfunk.org. Посмотрите на содержимое поддиректории bin. В частности на https://github.com/krf/dotfiles/blob/master/bin/smem.pl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:46 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли .SO собрана со статическим рантаймом, то у нее будет своя куча. Причем не только куча, но и все остальные структуры рантайма. Кстати, вполне вероятно, что память занимает вовсе не куча.Библиотека загружается динамически, именно так, как приведено в моём коде. Статически мне нет смысла её линковать совершенно, вся соль в динамической загрузке. И, вероятно, Dimitry Sibiryakov, в чём то прав и правильно ткнул меня носом. Dimitry Sibiryakov, приношу свои извинения, я был не прав, вспылив :) Прошу прощения, у меня уже полночь, завтра продолжу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:50 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Владимир2012, Спасибо, посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 21:51 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Ой не пойму я чего ты к этим мегабайтам прицепился... Они же виртуальные. Реальное ОЗУ выделяется по 4к гораздо позже. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2016, 22:04 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНо, как бы то ни было, при создании кучи идёт выделение исключительно виртуальной памяти и никакой резервации физической. О чём и говорят цифры в стартовом посте. Собственно вот ответ. Andrej_f[/src] var.1 top: Код: plaintext 1. 2. 3. var.2 top: Код: plaintext 1. 2. 3. VIRT 139876 это не выделенная память, а выделенная непрерывная область адресов VMA виртуальной памяти, которая пока uncommited. После первого обращения к ней, например, инициализации будет происходить постраничный commit с созданием PTE для каждой страницы - т.е. выделением физической памяти. Видимо рантайм используя mmap() заранее выделил непрерывную область адресов, чтобы если в неё накомитишь мелких объектов, а потом удалишь их, чтобы можно было её повторно использовать для больших объектов/массивов. Обычно она выделяется функциями VirtualAllocEx() в Windows, или mmap() в POSIX (Linux, ...). Её можно выделять хоть в миллион раз больше реальной физической памяти. Any way to reserve but not commit memory in linux? https://www.opennet.ru/base/sys/procps_info.txt.html VIRT -- общий объем виртуальной памяти, используемой процессом, включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 02:51 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_f, суть проблемы - нервная диагностика. хочешь верной - запусти под valgrind. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 07:56 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, По вашей ссылке:авторThe Linux equivalent of VirtualAlloc() is mmap(), which provides the same behaviours. However as a commenter points out, reservation of contiguous memory is the behaviour of calls to malloc() as long as the memory is not initialized (such as by calloc() , or user code).Кроме того, инфа на "стаковерфлов" не от разработчиков linux/gnu, полностью ей доверять нельзя. Своими же глазами я вижу, что каждый запущенный поток, вызвавший malloc/calloc, получает отдельные 65 мегабайт памяти. У меня пока висит чуть более 10 потоков, занимающих вместе полтора гига, пусть даже и VIRT, пусть она и не commited, а только reserved, но где написано, что зарезервированная память отдается другим потокам/процессам/системе при общей нехватке? Мне нужны сотни потоков, не жрущие каждый по ненужным им десяткам мегабайт. Пока что я выяснил, что функции, неявно использующие malloc при вызове из потока вызывают "утечку" памяти. Меняю их. Да, память должна возвращаться системе после уничтожения потока, но нерационально выделять/резервировать так много. MasterZivхочешь верной - запусти под valgrindЗапускал. Утечек он не находит (кроме pthread_create в определенных случаях, но это фича valgrind). Но он и не считает утечкой то, что считаю я, с его точки зрения такой расход памяти нормален (технически это не утечка), с моей нет. Буду отписываться по мере продвижения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 21:49 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fгде написано, что зарезервированная память отдается другим потокам/процессам/системе при общей нехватке? Нигде. Потому что она не отдаётся. У каждого 32-х разрядного процесса свои собственные четыре гигабайта адресного пространства. Процесс чисто технически не может поделиться ими с кем-то ещё. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 22:07 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Хорошо, это я уже понял, непонятно другое - в мануалах пишут о том, что потоки в линуксе используют общее адресное пространство основного процесса. Я же вижу, что каждый отдельный поток получает собственную кучу как только запрашивает кусочек памяти. И да, технически эта новая куча становится частью общего пространства, только вот используется только этим потоком, заставляя каждый новый поток получать десятки мегабайт в ответ на запрос десятка байт. Или я чего то не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 22:55 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fзаставляя каждый новый поток получать десятки мегабайт в ответ на запрос десятка байт. Или я чего то не понимаю. Ты не понимаешь, что память выделяется страницами по 4к. А твоими мегабайтами выделяется адресное пространство. Это две разные вещи. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 23:01 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Андрей /без обид/. Расскажу вам об том как нахожу ответ на свои вопроса. В редких случаях /близко к нулю/ у кого-то прошу совета. Почему? Иначе мысль начинает думать не как решить вопрос, а у кого найти ответ. И времени при этом тратится больше и знаний от этого "не приходят". Ни к тому это вам написал, чтобы вы в форуме не просили помощи ... Ваше право выбрать более приемлемый для вас путь. PS: Организация памяти процесса https://habrahabr.ru/company/smart_soft/blog/185226/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2016, 23:44 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Владимир2012PS: Организация памяти процесса https://habrahabr.ru/company/smart_soft/blog/185226/ http://duartes.org/gustavo/blog/category/linux/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 00:06 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fВася Уткин, По вашей ссылке:авторThe Linux equivalent of VirtualAlloc() is mmap(), which provides the same behaviours. However as a commenter points out, reservation of contiguous memory is the behaviour of calls to malloc() as long as the memory is not initialized (such as by calloc() , or user code).Кроме того, инфа на "стаковерфлов" не от разработчиков linux/gnu , полностью ей доверять нельзя. Своими же глазами я вижу, что каждый запущенный поток, вызвавший malloc/calloc, получает отдельные 65 мегабайт памяти. У меня пока висит чуть более 10 потоков, занимающих вместе полтора гига, пусть даже и VIRT, пусть она и не commited, а только reserved , но где написано, что зарезервированная память отдается другим потокам/процессам/системе при общей нехватке? Людям с репутацией 200 000 на стаковерфлов доверять нельзя, а мне можно. А если серьёзно, мои программы и по 1 Петабайту VIRT памяти имеют на железе с 0.25 терабайта RAM, ничего не свопят и работают так быстро, как ни у кого, и чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 00:50 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
И снова о памяти в Linux - /proc/meminfo http://markelov.blogspot.com/2009/01/linux-procmeminfo.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 00:52 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Вася УткинА если серьёзно, мои программы и по 1 Петабайту VIRT памяти имеют на железе с 0.25 терабайта RAM, ничего не свопят и работают так быстро, как ни у кого, и чего?Помнится в 2000-х у меня на DX-33 c 2MB RAM /без hdd и дисководов/ WIN-98 работала. Мини ядро было собрано на базе Slacware. И сейчас уж не помню, как Windows 98 грузил ... /но стартовала и работала/. Вот это действительно интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 01:02 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fУ меня пока висит чуть более 10 потоков, занимающих вместе полтора гига, пусть даже и VIRT, пусть она и не commited, а только reserved, но где написано, что зарезервированная память отдается другим потокам/процессам/системе при общей нехватке? Не смущает что есть два разных термина reserved и commited ? Если бы память сразу отдавалась, то зачем два разных слова для одного и того же действия? reserved просто сообщает ОС что конкретное виртуальное адресное пространство может быть использовано программой. В случае обращения программой в это место ОС подставит реальную память т.е. commited, причем не одним большим куском, а страницами по 4 Кб, т.е. например создашь массив на 10 Кб, займешь всего 12 Кб реальной. Почитай что такое виртуальная память и как она устроена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 07:30 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Тут много всяких нелинейностей. Поскольку автор не юзает выделенную память то по всей видимости работает механизм optimistic memory allocation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 11:00 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вообщем вот ответ: 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. прошу прощения , но это не ответ, ибо у авторuname -a Linux ws-dbn 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux принципиально другая аппаратная архитектура ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 11:10 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
д0kпрошу прощения , но это не ответ, ибо у авторuname -a Linux ws-dbn 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux принципиально другая аппаратная архитектура ...Let it be. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2016, 11:39 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Короче, я добился того, чего хотел. Я не буду спорить ни с кем по поводу виртуальности адресного пространства или фрагментации памяти - для этого я слишком туп. Для себя я добился снижения показателя VIRT в примерно 10 раз и вообще его бесконтрольного роста. Для тех, кому интересно, ниже результаты моих изысканий. Остальные могут пинаться, сколько влезет. Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2016, 21:20 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fКороче, я добился того, чего хотел. Я не буду спорить ни с кем по поводу виртуальности адресного пространства или фрагментации памяти - для этого я слишком туп. Для себя я добился снижения показателя VIRT в примерно 10 раз и вообще его бесконтрольного роста. Для тех, кому интересно, ниже результаты моих изысканий. Остальные могут пинаться, сколько влезет. Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. мне кажется, что многое из этого не правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 01:30 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_f Код: plaintext 1. 2. 3. 4. у тебя вот тут то же самое, что alloca() void *db_thread(void *) { char c[100]; sleep(9); return NULL; } попробуй подставить вместо 100 переменную, очень удивишься gcc позволяет создавать массивы переменной длины, если явно их не запретить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 01:34 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_f Код: plaintext 1. 2. 3. 4. 5. 6. 7. выделение памяти под int ничем не отличается от выделения памяти под char* в C++11 есть thread_local переменные http://en.cppreference.com/w/cpp/keyword/thread_local наверно ими нужно пользоваться static __thread наверно то же самое, в ассемблерный листинг посмотреть лень, там видно такие вещи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 01:41 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_f Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. по-моему, ты путаешь stack и heap ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 01:47 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Судя по всему, ТС как Дон Кихот сражался с меньницами и победил их. Я рад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 07:32 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Новый Годмне кажется, что многое из этого не правильноДа, я то же по учебнику делал сначала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 09:45 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Новый Годпопробуй подставить вместо 100 переменную, очень удивишься gcc позволяет создавать массивы переменной длины, если явно их не запретитьЧему удивлюсь? Вы думаете, я этого не знал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 09:47 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Новый Годпо-моему, ты путаешь stack и heapДа вроде нет. Каждый новый поток создается со стеком, размер которого по умолчанию определен системой, посмотреть можно ulimit -s, в моём случае это 8МБ. С помощью pthread_attr_setstacksize можно задать свой размер стека (а на с помощью pthread_attr_setstacksize, как пишут во многих местах). Если у меня 100 потоков, каждый отъест 8МБ для стека. Что я напутал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 10:05 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
Andrej_fС помощью pthread_attr_setstacksize можно задать свой размер стека (а на с помощью pthread_attr_setstacksize, как пишут во многих местах)Упс, ошибочка, читать так: С помощью pthread_attr_setstack можно задать свой размер стека (а не с помощью pthread_attr_setstacksize, как пишут во многих местах) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 10:08 |
|
||
|
Помогите, пожалуйста, с malloc в shared library, gcc, linux
|
|||
|---|---|---|---|
|
#18+
MasterZivСудя по всему, ТС как Дон Кихот сражался с меньницами и победил их. Я рад.Ну раз все рады, то и я рад. Возможно, я боролся с мельницами, и даже весьма вероятно, ибо это первая моя программа под линукс и первое знакомство с gcc. Главное, что я удовлетворён, тем, что мой демон в работе показывает 250 МБ VIRT и 5932 RES со всеми своими потоками, а не гигабайты, как было раньше. Я так сплю спокойней, ибо серверок мой, а не дядин, и на нем всего 18 ГБ памяти, а задач крутится не мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 10:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018457]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 162ms |

| 0 / 0 |
