что это за цифири я не понял.. у меня в limits.conf
* - as 600000
ну и
$ free
total used free shared buffers cached
Mem: 1957828 1779200 178628 0 273032 1014708
-/+ buffers/cache: 491460 1466368
Swap: 3122272 9400 3112872
опять таки, не берусь утверждать на 100%, но IMO из userspace твоя задача решения не имеет. для процессов память безгранична, пока malloc другого не скажет.
а если пойти другим путем, я вытащу из исходников как там ulimit -v откуда и что читает, далее мне нужно узнать: сколько у меня использовано (как пользователя), потом нужное мне я простым вычитанием найду.. такое возможно?!
лимит я получил через strace это getrlimit(RLIMIT_AS.., понятно что если лимитов нет я возьму TotalMem из meminfo
а как мне теперь узнать у системы сколько памяти использовано под пользователем?
задача свелась к чтению всех statm из /proc для пользователя
может кому пригодится, это работает, но меня не покидает ощущение что все это как то через одно место)))
> осмелюсь таки спросить, какого чёрта это вообще понадобилось?
помогаю портировать одну самописную систему, там было GlobalMemoryStatus, dwAvailVirtual.
не хотелось бы объясняться, что это не возможно в linux системах и т.п.
пока она не забита нулями, ты можешь (на 64-битной системе) аллоцировать хоть 200 терабайт на тачке с 3ГБ.
тут вдруг подошел www_linux_org_ru, и говорит, мне ваше творчество очень импонирует... классика программирования.... в народной мизансцене делает вашу программу просто многогранной, а я такой сижу читаю все это и думаю: да да да да.. (С) КВН
p.s. этот код, вдруг почему то, работает корректно и на 64 битах и на 32 битах без забивания нулями. и к сожалению, насчет «200 терабайт на тачке с 3ГБ.»
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
это как бы лимит сработал...