Limity pamięci programu na poziomie kodu [UNIX]

0

Witam!

mam następujący problem... chcę aby mój program narzucał sobie limit zasobów pamięci jakie może zaalokować, czyli realizować to ograniczenie w kodzie. Póki co jedyne co mi uporczywie zwracał google to setrlimit(2).... i coś nie chce mi to poprawnie działać

o ile nadawanie limitu np. czasu pracy, przez RLIMIT_CPU działa bardzo ładnie i przyjemnie, to próby ograniczania pamięci za pomocą RLIMIT_AS / RLIMIT_MEMLOCK (które wydają się być 'podejrzane' o służenie temu) kończą się jedynie tym, że jakakolwiek próba alokowania zmiennych formułą
[code]int a* = new int[ liczba ] [/code]
kończy się wywaleniem std:bad_allock, niezależnie od rozmiaru alokowanej pamięci

natomiast zwykłe, twarde
[code]int a[ COŚ_DUUUŻEGO ]; [/code]

przechodzi bez szwanku, a powinno wywalić segfaulta...

jak ktoś wie w jaki sposób regulować limit pamięci (działam na Mandrivie 2008, jądro 2.6.24.5) to proooooooooszę o pomoc

pozdrawiam
Wojtekzozlak

0

A może tak na piechotę (skoro nie mozesz znaleźć nic w standardzie języka): przeładuj sobie operatory alokacji pamięci new i new[] i zrób zmienną (w tym przypadku chyba globalną niestety) w której będziesz przechowywał ilość pamięci którą możesz jeszcze zaalokować. Jak okaże się ze ktos chce więcej niż jest dostnępne to rzucisz bad alloc.

0

hm.... nie przejdzie, a to z takiego względu, że program ma uruchamiać inny, zewnętrzny (przez execl/execv itd.), narzucając mu odpowiednie limity, a następnie czuwać nad tym co dzieje się z nim dzieje (forkowanie, a następnie śledzenie przez ptrace() )... a dokładniej działać według schematu

dziecko = fork();

if(dziecko == 0) {
   ustawienie limitów;
   włączenie śledzenia przez ptrace();
   odpalenie programu przez execl();
}else{
   obsługa sygnałów od potomka;
}

i o ile śledzenie działa mi cacy, tak samo jak narzucanie limitów czasowych przez setrlimit(), to z pamięcią sobie nie radzę :/

0

int a[ COŚ_DUUUŻEGO ]; tworzy sie na stosie, nie na stercie. moze RLIMIT_AS / RLIMIT_MEMLOCK ograczniaja tylko sterte, zas stos czyms innym?

1 użytkowników online, w tym zalogowanych: 0, gości: 1