LINUX.ORG.RU

Узнать [программно] объем свободной памяти без обращения к /proc


0

1

На ЛОРе нашел только этот тред - http://www.linux.org.ru/forum/talks/6087390
N.B. Гугль у меня уже второй день не доступен (какие-то проблемы у магистральных провайдеров, похоже).
На Яндексе - только советы по администрированию.

Как получить размер свободной виртуальной памяти на текущий момент времени?
Первая мысль была - malloc/free(). Но malloc() может ответить только да/нет, и - помешать другим запущенным программам.
Какие варианты есть?

★★★★★

Какие варианты есть?

Если никто не поможет по существу - сходить на гугл через прокси или оперу-турбо.

adriano32 ★★★
()

Зачем malloc()? Если уж делать такие костыли, то анонимоус mmap() блоками по несколько мегабайт. Получишь остаток памяти с учётом оверкоммита и то при уловии, что адресное пр-во процесса позволяет вместить всю физ. память.

mashina ★★★★★
()
Ответ на: комментарий от anonymous

> Попутно вопрос - зачем?

Чисто спортивный интерес. Или, как говорят - Just for fun.

Гугль-Интернет после reboot'а наполовину разбанился. Вот что нашел:
http://stackoverflow.com/questions/669438/how-to-get-memory-usage-at-run-time...
http://stackoverflow.com/questions/2513505/how-to-get-available-memory-c-g

pacify ★★★★★
() автор топика
Ответ на: комментарий от anonymous

man 2 sysinfo


Вот что получилось:

#include <stdio.h>
#include <sys/sysinfo.h>

int main() {
  struct sysinfo info;
  sysinfo(&info);
  printf("Секунд с момента начальной загрузки: %lu (%lu минут)\n", info.uptime, info.uptime/60);
  printf("Общее количество оперативной памяти: %lu (%lu MB)\n", info.totalram, info.totalram/(1024*1024));
  printf("Объём доступной памяти: %lu (%lu MB)\n", info.freeram, info.freeram/(1024*1024));
}

$ gcc test.c
$ ./a.out 
Секунд с момента начальной загрузки: 3838 (63 минут)
Общее количество оперативной памяти: 4156792832 (3964 MB)
Объём доступной памяти: 3524206592 (3360 MB)

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Это не является способом «без обращения к /proc», т.к. sysinfo всю информацию из /proc'а и берет.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от boombick

> А чем вам, собственно, /proc не угодил?

Принципиально, хочется большей надежности и независимости от fs. На случай 12309, например.
P.S. Я понимаю, что /proc/ - это «виртуальная файловая система», и
обслуживается драйверами без обращения к данным на физическом носителе,
но тем не менее ...

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Рекомендую перечитать дедушку Кнута, то место, где он говорит про «root of all evil» =)

Тем более, что, как уже отметили выше, sysinfo все равно обращается к /proc

boombick ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.