Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > При заполнении ОЗУ близко к максимуму


Автор: georain 13.11.2008, 13:38
Linux HSLab 2.6.25-gentoo-r7
x86_64
AMD Athlon 64
4Gb RAM

При выделении максимально доступной памяти в последних блоках при заполнении программа падает. В дебаге не сообщается о seg.fail, а просто процесс заканчивается, память освобождается, а управление не возвращается.

Вот простой код:
Код

// с какого размера начать выделять память
static const size_t bytes_start = size_t(1024)*size_t(1024)*size_t(10000);
// каким размером закончить
static const size_t bytes_end = 1024*1024;
// сколько раз пытаться
static const size_t n = 1000;
// счётчик полного размера
static size_t full = 0;

// блоки памяти
struct Al{

    Al(): s(0), arr(0){

        // пытаемся выделить скока можем
        for(size_t b = bytes_start; b > bytes_end; b /= 2){
            s = b;
            arr = new(nothrow) uint8[b];
            if( arr != 0) break;
        };

        cout << "Al created with " << s << " bytes"<< endl;
        if (arr == 0) return;
        // заполняем
        for(size_t i = 0; i < s; ++i){
            arr[i] = static_cast<uint8>(i);
        };

        full += s;
        cout << "full Mb= " << full/(1024*1024) << endl;
    };
    ~Al(){
        delete[] arr; // vTictor спасибо
        cout << "Al deleted" << endl;
    };

    size_t s;
    uint8 * arr;
};

int main(){
    Al h[n];
    if(h){};

    cout << "full Mb= " << full/(1024*1024) << endl;
};


Вот вывод:
Код

Al created with 2621440000 bytes
full Mb= 2500
Al created with 655360000 bytes
full Mb= 3125
Al created with 81920000 bytes
full Mb= 3203
Al created with 40960000 bytes
full Mb= 3242
Al created with 20480000 bytes

Press ENTER to continue.


В дебаге вывод меньше:
Код

Al created with 2621440000 bytes
full Mb= 2500
Al created with 655360000 bytes
full Mb= 3125
Al created with 81920000 bytes
full Mb= 3203
Al created with 40960000 bytes
full Mb= 3242
Al created with 20480000 bytes

:((((

Падает здесь:
Код

        // заполняем
        for(size_t i = 0; i < s; ++i){
            arr[i] = static_cast<uint8>(i);
        };

Автор: GrayCardinal 13.11.2008, 13:52
georain, 
Наверно своп отключен или маленький

Добавлено через 2 минуты и 42 секунды
А вообще линь при нехватке памяти имеет право погасить любую прогу smile

Добавлено через 4 минуты и 55 секунд
И я не догнал, с какого боку там "struct" ?
struct Al{

Автор: georain 13.11.2008, 14:06
Цитата(GrayCardinal @  13.11.2008,  13:52 Найти цитируемый пост)
Наверно своп отключен или маленький

Да своп отключен, это не должно влиять

Цитата(GrayCardinal @  13.11.2008,  13:52 Найти цитируемый пост)
А вообще линь при нехватке памяти имеет право погасить любую прогу

А что это да за нахальство такое? Не хватает памяти, возвращай ноль, как обычно.


Цитата(GrayCardinal @  13.11.2008,  13:52 Найти цитируемый пост)
И я не догнал, с какого боку там "struct" ?
struct Al{ 

Да какая тут разница то...? smile

Автор: georain 13.11.2008, 14:36
Я кажется понял, ядро память выделяет, выделяет, отдаёт всё что есть, а потом она ему самому становится нужна, и оно грохает прогу. Если так, то почему именно эту, и как интересно съедать именно столько, чтобы не падало?

Автор: destrd 13.11.2008, 14:41
Цитата(georain @  13.11.2008,  14:06 Найти цитируемый пост)
Да своп отключен, это не должно влиять

всё правильно, убивает процесс который сожрал всю память. Вы о других то подумали?smile Может у вас там у течка памяти.

Автор: georain 13.11.2008, 14:44
Ну хорошо, а как тогда написать программу которая бы корректно работала? Пусть мне надо памяти очень много, но если больше не дают, обойдусь чем есть.

Точнее так: взять у системы максимально много памяти, но не упасть.

Автор: destrd 13.11.2008, 14:44
Цитата(georain @  13.11.2008,  14:36 Найти цитируемый пост)
Если так, то почему именно эту, 

Потому что она всё сожралаsmile

Добавлено через 7 минут и 55 секунд
Цитата(georain @  13.11.2008,  14:44 Найти цитируемый пост)
Точнее так: взять у системы максимально много памяти, но не упасть.

Ну попробуйте 
Код

int main(){
  try{
    Al h[n];
    if(h){};
}
catch(...)
{
  std::cerr<<"Кончилась память"<<std::endl;
}
    cout << "full Mb= " << full/(1024*1024) << endl;
};

Ну и убрать nothrow при выделении памяти.

Добавлено через 11 минут и 11 секунд
Хотя врядли это поможет, ядро всё равно может кильнуть

Автор: vTictor 13.11.2008, 14:57
Код

        // заполняем
        for(size_t i = 0; i < s; ++i){
            arr[i] = static_cast<uint8>(i);
        };


 Мне не нравится ++i, получается arr[0] не участвует в цикле? Следовательно выход за рамки массива.


ЗЫ  Ядро линух, в 32-х разрядной машине, не даёт выделиь память для одного процесса больше 3.8Гиг(или около того). Это жестко записано в ядре. Может ядро надо пересобрать? (Я не в курсе как у тебя, проверь)

Автор: georain 13.11.2008, 14:58
Цитата(destrd @  13.11.2008,  14:44 Найти цитируемый пост)
Ну попробуйте 

Тоже самое будет, проверка на ноль с nothrow аналогична перехвату исключения. Память выделяется, но не может быть использована.

Добавлено @ 15:00
Цитата(vTictor @  13.11.2008,  14:57 Найти цитируемый пост)
ЗЫ  Ядро линух, в 32-х разрядной машине, не даёт выделиь память для одного процесса больше 3.8Гиг(или около того). Это жестко записано в ядре. Может ядро надо пересобрать? (Я не в курсе как у тебя, проверь) 

У меня полная 64-х разрядность.

Цитата(vTictor @  13.11.2008,  14:57 Найти цитируемый пост)
Мне не нравится ++i, получается arr[0] не участвует в цикле? Следовательно выход за рамки массива.

Это не правильно. arr[0] участвует. Но даже если бы не участвовал, с чего выход за границу будет?

Добавлено
Кстати, винда так делает? Или что она делает? А UNIXы стандартно?

Автор: vinick 13.11.2008, 15:33
У тебя всего 4 гига RAM,  ты захватил 3,2 гига физической памяти,когда начал писать в массив arr, и при попытке захватить больше твой процесс убивает oom-killer.  Как побороть? Отключить oom-kiler и тогда я не представляю как будет вести себя система или следить за количеством захваченой памяти и не выходить за рамки приличия или подключить своп терабайта на 2-3. 

Автор: georain 13.11.2008, 15:42
vinick, я спрашиваю как это сделать средствами языка. Это же ведь не нормально, когда приложение падает! Оно не выполняет никаких запрещённых действий и тут нет логических ошибок!
Мне это вообще не понятно, зачем он её тогда выделяет, мог бы просто перестать выделять.
Столько мороки в стандартах и в коде по поводу исключения bad allocate, а реально оказывается оно на фиг не нужно, всё равно всё умрёт.
Короче моему возмущению нет придела smile

Автор: vinick 13.11.2008, 16:01
Цитата(georain @  13.11.2008,  15:42 Найти цитируемый пост)
vinick, я спрашиваю как это сделать средствами языка.

Средствами языка это не решить. Никак. Ты сожрал всю память и хочешь чтобы тебе послали исключение  или сигнал? а ведь им тоже для этого ресурсы нужны.
Цитата(georain @  13.11.2008,  15:42 Найти цитируемый пост)

Мне это вообще не понятно, зачем он её тогда выделяет, мог бы просто перестать выделять.

Он не может не выделять. так как тебе положено 2^64-1 байт виртуального адресного пространства на процесс. 

Цитата(georain @  13.11.2008,  15:42 Найти цитируемый пост)
Столько мороки в стандартах и в коде по поводу исключения bad allocate, а реально оказывается оно на фиг не нужно, всё равно всё умрёт.

Не путай выделение памяти и отображение виртуальной памяти на физические адреса. bad allocate, это для первого, а у тебя проблема во втором.

Цитата(georain @  13.11.2008,  15:42 Найти цитируемый пост)

Это же ведь не нормально, когда приложение падает! 

Ненормально когда приложение жрет столько памяти smile

Автор: vTictor 13.11.2008, 16:10
Ещё замечание: 
выделаеш память так arr = new(nothrow) uint8[b];, а освобождаешь так  delete arr;. Нужно  delete [] arr;   smile 

Ты в цикле выделяешь память для масива arr, на каждой итерации ему присваевается новое значение указателя, а старое теряется. 
Когда ты его заполняешь, то заполняешь не всю выделеную память. если надо увеличивать один и тот же блок, юзай realloc.

Да и вообще, зачем такие извращения? smile Цель какая??  smile 

Автор: vinick 13.11.2008, 16:16
Цитата(vTictor @  13.11.2008,  16:10 Найти цитируемый пост)
Ты в цикле выделяешь память для масива arr, на каждой итерации ему присваевается новое значение указателя, а старое теряется. 


Да нет, там у него все нормально.
Код

  if( arr != 0) break; // Если выделение прошло успешно, то выход из цикла

Автор: vTictor 13.11.2008, 16:24
vinick, точно. Я не заметил :( 

Автор: georain 13.11.2008, 16:45
Цитата(vinick @  13.11.2008,  16:01 Найти цитируемый пост)
Средствами языка это не решить. Никак. Ты сожрал всю память и хочешь чтобы тебе послали исключение  или сигнал? а ведь им тоже для этого ресурсы нужны.

ИМХО ОС управляет памятью и должна позаботится чтобы ей её хватило на свои нужды

Цитата(vinick @  13.11.2008,  16:01 Найти цитируемый пост)
Он не может не выделять. так как тебе положено 2^64-1 байт виртуального адресного пространства на процесс.

Зачем тогда bad allocate нужен?

Цитата(vinick @  13.11.2008,  16:01 Найти цитируемый пост)
Не путай выделение памяти и отображение виртуальной памяти на физические адреса. bad allocate, это для первого, а у тебя проблема во втором.

(А строкой выше ты написал что он не может не выделять.)
Да всё равно что там ОС делает, хоть она память на луне проецирует, приложение должно работать корректно по стандартам.

Цитата(vinick @  13.11.2008,  16:01 Найти цитируемый пост)
Ненормально когда приложение жрет столько памяти

А сколько памяти должно жрать приложение чтобы было нормально?

Цитата(vTictor @  13.11.2008,  16:10 Найти цитируемый пост)
Да и вообще, зачем такие извращения? smile Цель какая??  

Научные вычисления.

Автор: GrayCardinal 13.11.2008, 16:53
Я тоже не понимаю этот прикол. может стоит mmap поюзать с флагом MAP_ANONYMOUS ?

Автор: georain 13.11.2008, 17:14
mmap мне вообще сколько не попрошу выделяет :(

Автор: Mayk 13.11.2008, 17:36
Цитата(georain @  13.11.2008,  19:42 Найти цитируемый пост)
vinick, я спрашиваю как это сделать средствами языка. 

Прочитай man malloc, раздел bugs. Язык здесь не особо при чем.

Автор: vinick 13.11.2008, 18:00
Цитата(georain @  13.11.2008,  16:45 Найти цитируемый пост)
ИМХО ОС управляет памятью и должна позаботится чтобы ей её хватило на свои нужды

Она и заботится по мере сил.  Ты хочешь чтобы ОС читала твои мысли? ты ведь можешь на лету сделать system("swapon file") или поубивать другие процессы. ОС и так ждала до последнего.
Цитата(georain @  13.11.2008,  16:45 Найти цитируемый пост)
Зачем тогда bad allocate нужен?

Чтобы сообщить процессу что его адресное пространство кончилось, я так думаю.

Цитата(georain @  13.11.2008,  16:45 Найти цитируемый пост)

(А строкой выше ты написал что он не может не выделять.)

А в этой строке я написал "не путай" smile а ты продолжаешь путать. 

Цитата(georain @  13.11.2008,  16:45 Найти цитируемый пост)

приложение должно работать корректно по стандартам.

И в чем же ты видишь несоблюдение стандарта и какого? Ты запросил блок виртуальной памяти, и если есть столько, то система тебе его зарезервирует, или бросит исключение или 0, если такого блока нет. А когда ты начал заполнять этот блок и поставил под угрозу стабильность системы, тебя убили. Да неприятно, но ты можешь предложить другой вариант?

Цитата(georain @  13.11.2008,  16:45 Найти цитируемый пост)
А сколько памяти должно жрать приложение чтобы было нормально?

Столько сколько есть в наличии, не больше.

посмотри эту http://www.linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html, там как раз твой пример разобран.

Автор: GrayCardinal 13.11.2008, 18:22
georain, 


Цитата

mmap мне вообще сколько не попрошу выделяет :( 

Ха. А ты разве не этого хотел ?  smile  smile 

Автор: MAKCim 14.11.2008, 09:12
georain, 
читай про overcommiting и его стратегии
в Documentation/filesystems/proc.txt и Documentation/vm/overcommit-accounting.txt

Автор: MAKCim 14.11.2008, 09:35
так же покажи вывод трассировки процесса
Код

$ strace <программа> 2>log

и вывод
Код

$ cat /proc/vm/overcommit_memory

Автор: bilbobagginz 15.11.2008, 06:22
Цитата(MAKCim @  14.11.2008,  09:35 Найти цитируемый пост)
cat /proc/vm/overcommit_memory

Макс наверное имел ввиду:
Код

cat /proc/sys/vm/overcommit_memory



Автор: MAKCim 15.11.2008, 11:34
Цитата(bilbobagginz @  15.11.2008,  06:22 Найти цитируемый пост)
Макс наверное имел ввиду:

ну да  smile 

Автор: bilbobagginz 15.11.2008, 13:11
кстати, чуть было не забыл, есть еще одна штука, если работаешь со свопами, называется swappiness.
ее тоже иногда очень помогает подркрутить, когда работаешь с большой памятью, и не хочешь, чтобы оно своппилось.



Автор: georain 15.11.2008, 15:26
Вопрос не в том как решить эту проблему конкретно на моей машине, тут всё просто, ставлю сколько у меня оперативы минус 100-200МБ и всё.
Вопрос как сделать стабильное приложение? Чтобы оно не падало у пользователя! Причём желательно кроссплатформ.

Код

$ strace ./MemTest 2> log

Код

execve("./MemTest", ["./MemTest"], [/* 65 vars */]) = 0
brk(0)                                  = 0x603000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59b87e4000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59b87e3000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("./tls/x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./tls/libstdc++.so.6", O_RDONLY)  = -1 ENOENT (No such file or directory)
open("./x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./libstdc++.so.6", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=147700, ...}) = 0
mmap(NULL, 147700, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f59b87be000
close(3)                                = 0
open("/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/libstdc++.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@6\5\0\0\0\0\0@"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=985888, ...}) = 0
mmap(NULL, 3157792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f59b82c6000
mprotect(0x7f59b83ae000, 2097152, PROT_NONE) = 0
mmap(0x7f59b85ae000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe8000) = 0x7f59b85ae000
mmap(0x7f59b85b7000, 73504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f59b85b7000
close(3)                                = 0
open("./tls/x86_64/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./tls/libm.so.6", O_RDONLY)       = -1 ENOENT (No such file or directory)
open("./x86_64/libm.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("./libm.so.6", O_RDONLY)           = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY)        = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0?\0\0\0\0\0\0@"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=534664, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59b87bd000
mmap(NULL, 2629864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f59b8043000
mprotect(0x7f59b80c5000, 2093056, PROT_NONE) = 0
mmap(0x7f59b82c4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x81000) = 0x7f59b82c4000
close(3)                                = 0
open("./tls/x86_64/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./tls/libgcc_s.so.1", O_RDONLY)   = -1 ENOENT (No such file or directory)
open("./x86_64/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./libgcc_s.so.1", O_RDONLY)       = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\37\0\0\0\0\0\0@"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=55400, ...}) = 0
mmap(NULL, 2151240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f59b7e35000
mprotect(0x7f59b7e42000, 2093056, PROT_NONE) = 0
mmap(0x7f59b8041000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc000) = 0x7f59b8041000
close(3)                                = 0
open("./tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("./tls/libc.so.6", O_RDONLY)       = -1 ENOENT (No such file or directory)
open("./x86_64/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("./libc.so.6", O_RDONLY)           = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\334\1\0\0\0\0\0@"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1387664, ...}) = 0
mmap(NULL, 3494136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f59b7adf000
mprotect(0x7f59b7c2b000, 2097152, PROT_NONE) = 0
mmap(0x7f59b7e2b000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14c000) = 0x7f59b7e2b000
mmap(0x7f59b7e30000, 16632, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f59b7e30000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59b87bc000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59b87bb000
arch_prctl(ARCH_SET_FS, 0x7f59b87bb700) = 0
mprotect(0x7f59b7e2b000, 16384, PROT_READ) = 0
mprotect(0x7f59b8041000, 4096, PROT_READ) = 0
mprotect(0x7f59b82c4000, 4096, PROT_READ) = 0
mprotect(0x7f59b85ae000, 28672, PROT_READ) = 0
mprotect(0x601000, 4096, PROT_READ)     = 0
mprotect(0x7f59b87e5000, 4096, PROT_READ) = 0
munmap(0x7f59b87be000, 147700)          = 0
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0)                                  = 0x603000
brk(0x271624000)                        = 0x603000
mmap(NULL, 10485895168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7f59afadf000
munmap(0x7f59afadf000, 5378048)         = 0
munmap(0x7f59b4000000, 61730816)        = 0
mprotect(0x7f59b0000000, 135168, PROT_READ|PROT_WRITE) = 0
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x138e24000)                        = 0x603000
mmap(NULL, 5243015168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5913bff000
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59b87e2000
write(1, "Al created with 2621440000 bytes\n"..., 33) = 33
write(1, "full Mb= 2500\n"..., 14)      = 14
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x271624000)                        = 0x603000
mmap(NULL, 10485895168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x138e24000)                        = 0x603000
mmap(NULL, 5243015168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x9ca24000)                         = 0x603000
mmap(NULL, 2621575168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x4e824000)                         = 0x603000
mmap(NULL, 1310855168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f58024db000
write(1, "Al created with 655360000 bytes\n"..., 32) = 32
write(1, "full Mb= 3125\n"..., 14)      = 14
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x271624000)                        = 0x603000
mmap(NULL, 10485895168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x138e24000)                        = 0x603000
mmap(NULL, 5243015168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x9ca24000)                         = 0x603000
mmap(NULL, 2621575168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x4e824000)                         = 0x603000
mmap(NULL, 1310855168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x27724000)                         = 0x603000
mmap(NULL, 655495168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x13ea4000)                         = 0x603000
mmap(NULL, 327815168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f498d148000
write(1, "Al created with 163840000 bytes\n"..., 32) = 32
write(1, "full Mb= 3281\n"..., 14)      = 14
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x271624000)                        = 0x603000
mmap(NULL, 10485895168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x138e24000)                        = 0x603000
mmap(NULL, 5243015168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x9ca24000)                         = 0x603000
mmap(NULL, 2621575168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x4e824000)                         = 0x603000
mmap(NULL, 1310855168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x27724000)                         = 0x603000
mmap(NULL, 655495168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x13ea4000)                         = 0x603000
mmap(NULL, 327815168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0xa264000)                          = 0x603000
mmap(NULL, 163975168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 81924096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3aff6f2000
write(1, "Al created with 81920000 bytes\n"..., 31) = 31
write(1, "full Mb= 3359\n"..., 14)      = 14
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x271624000)                        = 0x603000
mmap(NULL, 10485895168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x138e24000)                        = 0x603000
mmap(NULL, 5243015168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x9ca24000)                         = 0x603000
mmap(NULL, 2621575168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x4e824000)                         = 0x603000
mmap(NULL, 1310855168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x27724000)                         = 0x603000
mmap(NULL, 655495168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x13ea4000)                         = 0x603000
mmap(NULL, 327815168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0xa264000)                          = 0x603000
mmap(NULL, 163975168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 81924096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 81924096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x5444000)                          = 0x603000
mmap(NULL, 82055168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 40964096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2c65929000
write(1, "Al created with 40960000 bytes\n"..., 31) = 31
write(1, "full Mb= 3398\n"..., 14)      = 14
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 10485764096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x271624000)                        = 0x603000
mmap(NULL, 10485895168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 5242884096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x138e24000)                        = 0x603000
mmap(NULL, 5243015168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 2621444096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x9ca24000)                         = 0x603000
mmap(NULL, 2621575168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 1310724096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x4e824000)                         = 0x603000
mmap(NULL, 1310855168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 655364096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x27724000)                         = 0x603000
mmap(NULL, 655495168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 327684096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x13ea4000)                         = 0x603000
mmap(NULL, 327815168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 163844096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0xa264000)                          = 0x603000
mmap(NULL, 163975168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 81924096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 81924096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x5444000)                          = 0x603000
mmap(NULL, 82055168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 40964096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mprotect(0x7f59b0021000, 40828928, PROT_READ|PROT_WRITE) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7f1dc3b60000
munmap(0x7f1dc3b60000, 4849664)         = 0
munmap(0x7f1dc8000000, 62259200)        = 0
mprotect(0x7f1dc4000000, 41095168, PROT_READ|PROT_WRITE) = -1 ENOMEM (Cannot allocate memory)
munmap(0x7f1dc4000000, 67108864)        = 0
mmap(NULL, 40964096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x2d34000)                          = 0x603000
mmap(NULL, 41095168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 20484096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2c5f75e000
write(1, "Al created with 20480000 bytes\n"..., 31) = 31
+++ killed by SIGKILL +++

Тут всё нормально кроме +++ killed by SIGKILL +++ в конце.

Код

$ cat /proc/sys/vm/overcommit_memory
0


Цитата(vinick @  13.11.2008,  18:00 Найти цитируемый пост)
Столько сколько есть в наличии, не больше.

Это и требуется.
Цитата(GrayCardinal @  13.11.2008,  18:22 Найти цитируемый пост)
Ха. А ты разве не этого хотел ?

Нет, я хотел чтобы выделялось сколько есть.

Автор: georain 19.2.2009, 16:37
Как спросить сколько у системы есть физического/виртуального ОЗУ всего/в наличии?

Автор: MAKCim 19.2.2009, 17:25
Цитата(georain @  19.2.2009,  16:37 Найти цитируемый пост)
Как спросить сколько у системы есть физического/виртуального ОЗУ всего/в наличии? 

/proc/meminfo

Автор: georain 19.2.2009, 18:08
Цитата(MAKCim @  19.2.2009,  17:25 Найти цитируемый пост)
/proc/meminfo 

 smile 

Автор: georain 19.2.2009, 18:54
А есть какие нибудь парсеры специально для meminfo и т.п.?

Автор: MAKCim 19.2.2009, 19:52
Цитата(georain @  19.2.2009,  18:54 Найти цитируемый пост)
А есть какие нибудь парсеры специально для meminfo и т.п.? 

чем *scanf не устраивает?
там все тупо просто

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)