infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: alexandru din Iunie 01, 2009, 16:52:30



Titlul: limitari de memorie
Scris de: alexandru din Iunie 01, 2009, 16:52:30
Hy, este vreo posibilitate ca sa limitez memoria folosita de un program cand ruleaza? Adica cand dau system(program_name); ca programul sa foloseasca doar o anumita memorie si cand depaseste sa fie oprit?


Titlul: Răspuns: limitari de memorie
Scris de: Paul-Dan Baltescu din Iunie 01, 2009, 17:05:48
In linux poti folosi ulimit.


Titlul: Răspuns: limitari de memorie
Scris de: alexandru din Iunie 01, 2009, 17:54:56
Citat
In linux poti folosi ulimit.
Si sub windows :D


Titlul: Răspuns: limitari de memorie
Scris de: Andrei Misarca din Iunie 01, 2009, 18:32:00
In linux poti folosi ulimit.
Si cum se foloseste? :D


Titlul: Răspuns: limitari de memorie
Scris de: Paul-Dan Baltescu din Iunie 01, 2009, 18:47:55
Pentru windows nu stiu nimic.

La ulimit poti face asa: ulimit -v dimensiune_kbytes. Atentie, daca folosesti comanda intr-un terminal, limita mai poate fi micsorata ulterior, dar nu mai poate fi crescuta la loc. Pentru a scapa de efectele ulimit inchizi terminalul.

Pentru mai multe detalii scrie in terminal:
Cod:
man ulimit


Titlul: Răspuns: limitari de memorie
Scris de: Andrei Misarca din Iunie 01, 2009, 18:54:25
daca ii dau limita 640 si incerc sa compilez ceva ce cu siguranta nu foloseste mai mult de 640kB imi zice asta
Cod:
g++-4.2: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory


Titlul: Răspuns: limitari de memorie
Scris de: alexandru din Iunie 01, 2009, 19:02:59
Citat
In linux poti folosi ulimit.
.
 :-k ..eu nu stiu sa lucrez sub linux, deci va rog sa ma corectati daca spun prostii, ulimit il trimit "cmd"-ului ...sau este o functie pe care o scriu inainte de system(...);  :?


Titlul: Răspuns: limitari de memorie
Scris de: Paul-Dan Baltescu din Iunie 01, 2009, 19:58:37
daca ii dau limita 640 si incerc sa compilez ceva ce cu siguranta nu foloseste mai mult de 640kB imi zice asta
Cod:
g++-4.2: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory

Cred ca e din cauza ca libraria respectiva are nevoie de mai multa memorie.

Citat
In linux poti folosi ulimit.
.
 :-k ..eu nu stiu sa lucrez sub linux, deci va rog sa ma corectati daca spun prostii, ulimit il trimit "cmd"-ului ...sau este o functie pe care o scriu inainte de system(...);  :?

Ulimit e o comanda pentru linux. Nu merge in windows.


Titlul: Răspuns: limitari de memorie
Scris de: Pripoae Teodor Anton din Iunie 01, 2009, 23:17:13
Citat
g++-4.2: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory

Problema apare pentru ca tu limitezi orice proces care e rulat in terminalul curent, inclusiv gcc. Ca sa limitezi doar procesul, fa ceva de genul asta :

Cod:
#!/bin/bash

# sunt intr-un nou subshell (trebuie rulat ca script .sh)

# atentie, trebuie folosit -static, altfel va aloca memoria total aiurea
g++ -Wall -W -O2 -static test.cpp -o test

ulimit -v 240

./test


Cod:
#include <cstdio>

#define maxN    300100

int A[maxN], N;
int main () {
        int i;

        freopen("test.in", "r", stdin);
        freopen("test.out", "w", stdout);

        scanf("%d", &N);

        for (i = 1; i <= N; ++ i)
                scanf("%d", &A[i]);

        for (i = N; i ; -- i)
                printf("%d ", A[i]);

        while (1); // asta ca sa fiu sigur, parca cu ulimit merge si sa limitezi timpul.
}
Partea buna la treaba asta, e ca poti modifica la ulimit fara sa trebuiasca sa inchizi terminalul, pt ca scriptul e rulat intr-un alt terminal virtual. Pe windows nu cred ca poti limita memoria, am incercat eu mai demult, si nu prea poti, poate in cygwin cu ulimit, dar nu garantez.


Titlul: Răspuns: limitari de memorie
Scris de: Andrei Misarca din Iunie 02, 2009, 16:03:57
Citat
Cod:
#!/bin/bash

# sunt intr-un nou subshell (trebuie rulat ca script .sh)

# atentie, trebuie folosit -static, altfel va aloca memoria total aiurea
g++ -Wall -W -O2 -static test.cpp -o test

ulimit -v 240

./test
Si acel script cum il creez?


Titlul: Răspuns: limitari de memorie
Scris de: Savin Tiberiu din Iunie 02, 2009, 16:15:34
creezi un fisier in care scrii acel cod. Sa zicem script.sh.
Dupa aceea poti face ceva de genul
Cod:
>chmod a+x script.sh
>./script.sh
sau
Cod:
>sh script.sh


Titlul: Răspuns: limitari de memorie
Scris de: alexandru din Iunie 02, 2009, 18:53:11
Citat
, poate in cygwin cu ulimit,
Am incercat ... ulimit -v 240 dar imi aparare:
Citat
bash: ulimit:virtual memory : cannot modify limit: Invalid argument

Am dat un help ulimit ......si am citit ce scria acolo, dar tot nu ma prind ce nu merge  ???


Titlul: Răspuns: limitari de memorie
Scris de: Andrei Misarca din Iunie 02, 2009, 19:01:45
Merge, insa totusi la o problema care pe IA imi zice ca nu foloseste mai mult de 300 de kilo, acilea tre sa ii dau limita 900 ca sa mearga, altfel imi zice killed sau
Cod:
: error while loading shared libraries: cannot create search path array: Cannot allocate memory


Titlul: Răspuns: limitari de memorie
Scris de: Sima Cotizo din Iunie 02, 2009, 19:23:01
Poate va ajuta articolul asta (http://certcities.com/editorial/columns/story.asp?EditorialsID=214). Oricum, daca cititi putin sursa de la jrun (http://hackers.devnet.ro/browser/trunk/jrun/jrun.c) si niste documentatie de threaduri (http://users.actcom.co.il/~choo/lupg/tutorials/multi-thread/multi-thread.html) puteti sa faceti un programel care verifica la x (mili)secunde cata memorie mananca un program si daca depaseste il omoara. Bineinteles, asta nu merge in Windows... :)

Ah, btw, jrun si ulimit cred ca "masoara" altfel memoria... jrun cred ca ia totul in considerare (stack, heap...) in timp ce ulimit le ia separat.


Titlul: Răspuns: limitari de memorie
Scris de: alexandru din Iunie 03, 2009, 20:05:03
am citit articolul dar tot nu m-am lamurit de ce nu merge ......  ](*,)
..incurand o sa se termine scoala si  o sa am timp sa ma uit si peste 
Citat
sursa de la jrun si niste documentatie de threaduri

Cunoasteti niste tutorial bune pt folosirea Ubuntu -lui ? ... :D


Titlul: Răspuns: limitari de memorie
Scris de: Pripoae Teodor Anton din Iunie 03, 2009, 20:40:18
Eu te sfatuiesc sa folosesti Fedora 11, care vine cu o gramada de chestii noi pe care nu o sa le vezi pe Ubuntu. Uite un tutorial de instalare fedora  aici (http://www.howtoforge.com/the-perfect-desktop-fedora-10), si aici (http://www.linux-tutorial.info/) un tutorial de linux. Nu o sa gasesti nicaieri un tutorial de folosire a unei distributii, ci cel mult instalarea, pentru suport sunt forumurile distributiilor.