The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Контроль объема используемой памяти на Си"
Отправлено vic, 23-Дек-08 22:54 
>Всегда были проблемы при работе с памятью, и сейчас возник следующий вопрос.

Изучайте матчасть и закрывайте пробелы.

>У меня в программе на Си в Linux'е используется динамический список.

переходите на с++ что ли, уже 2009 год на дворе и  эта ваша фраза как-то пугает, видимо наследуемый код, если нет, то страшно..

>Соответственно есть два потока: один добавляет в список записи, другой их
>обрабатывает и удаляет. Для выделения/очистки памяти используется *alloc/free.

есть тулза от гугла (google perf tools или как-то так) которая подменяет стандартный malloc на свою реализацию заточеную под очень частое выделение/удаление памяти. Это типо для борьбы с дефрагментацией :)

>Добавление происходит быстрей
>удаления, что естественно ведет к постоянному росту списка, что в конечном
>счете может привести к переполнению памяти. Соответственно вопрос, как этого избежать?

сливать в свап и увеличивать свап, добавить озу, еще добавить озу, юзать темповые файлы, и в конце концов если есть возможность свободно менять код - переписать дизайн.

>Можно ли, например, задать программе (внутри самой программы) какое-то ограничение на
>объем доступной памяти, и при этом, соответственно, определить момент, когда этот
>предел будет достигнут (в этом случае можно было бы делать паузу
>и ждать, пока снова не появится достаточно доступной памяти)?

легко, можно даже снаружи перед запуском задать объем памяти для процесса:

man ulimit ключ -v

дальше если malloc вернет NULL, значит не может выделить, пора возвращать выделенное =)

внутри программы системными вызовами getrlimit, getrusage, setrlimit.


>Кроме того, я пытался использовать процессы вместо потоков и разделяемую память, но
>в этом случае ограничение на объем доступной разделяемой памяти оказался слишком
>маленький (не то 32Мб, не то 64). Может кто-нибудь знает, как
>увеличить это ограничение хотя бы до 2Гб?

видимо ulimit -l :)

>
>И забыл сказать. Программа написана под Red Hat Enterprise Linux 3.0 (ядро
>linux 2.4.21)

достаточно ядра, редкая софтина юзает особые уличный фичи всяких энтерпрайзов и т.п. :)

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру