Найти оставшуюся память доступной для процесса в 32-битной Linux с использованием C ++ - PullRequest
1 голос
/ 20 декабря 2010

Моя программа на C ++ кэширует множество объектов, и в начале каждого крупного вызова API я хочу убедиться, что для вызова API доступно не менее 500 МБ.Возможно, у меня не хватает ОЗУ + пространство подкачки (рассмотрим систему с 1 ГБ ОЗУ + файл SWAP 1 ГБ), или у меня не хватает Виртуального адреса в моем процессе (возможно, я уже использую 3,7 ГБ из 4 ГБ)адресное пространство).Мне нелегко приблизиться к объему кэшированных данных, но я могу удалить некоторые из них, если это становится проблемой, и делать это итеративно, пока у меня не будет 500 МБ в системном или адресном пространстве (в зависимости от того, что становится узким местом).Поэтому мои требования - найти в C ++ на 32-битной Linux:

A) Найти, сколько свободного места в RAM + SWAP.
B) Сколько адресного пространства пользовательского пространства доступно для моего процесса.
C) Сколько виртуальной памяти процесс уже использует.Считайте, что это похоже на «Подтверждение размера» или «Размер рабочего набора» процесса в Windows.

Любые ответы будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Посмотрите на / proc / vmstat, там много информации о системной памяти.

Карты / proc // предоставят вам много информации о вашей структуре памяти процесса.

Обратите внимание, что если вы проверите память перед запуском длинной работы, другой процесс может съесть всю доступную память, и ваша программа в любом случае может вылететь!

Я ничего не знаю о ваших кэшированных классах, но если эти объекты довольно малы, вы, вероятно, переопределили операторы new / delete. По этому довольно легко отслеживать потребление памяти (по крайней мере, подсчитывая объекты) Почему бы не изменить политику кэширования? И очистите старый неиспользуемый объект.

Еще один уродливый способ - попытаться выделить несколько порций памяти и посмотреть, как программа может выделить их и после этого освободить. На 32 битах это может дать сбой, потому что куча может быть фрагментирована, но если она работает, вы уверены, что у вас достаточно памяти в это время.

0 голосов
/ 20 декабря 2010

Посмотрите на источник для vmstat: здесь .Затем найдите функцию Domem (), которая собирает всю информацию о памяти (занятой и свободной).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...