Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: limitari de memorie  (Citit de 3172 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« : 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?
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #1 : Iunie 01, 2009, 17:05:48 »

In linux poti folosi ulimit.
Memorat

Am zis Mr. Green
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #2 : Iunie 01, 2009, 17:54:56 »

Citat
In linux poti folosi ulimit.
Si sub windows Very Happy
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #3 : Iunie 01, 2009, 18:32:00 »

In linux poti folosi ulimit.
Si cum se foloseste? Very Happy
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #4 : 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
Memorat

Am zis Mr. Green
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #5 : 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
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #6 : Iunie 01, 2009, 19:02:59 »

Citat
In linux poti folosi ulimit.
.
 Think ..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(...);  Confused
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #7 : 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.
.
 Think ..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(...);  Confused

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

Am zis Mr. Green
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #8 : 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.
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #9 : 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?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #10 : 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
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #11 : 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  Huh
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #12 : 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
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #13 : Iunie 02, 2009, 19:23:01 »

Poate va ajuta articolul asta. Oricum, daca cititi putin sursa de la jrun si niste documentatie de threaduri 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... Smile

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.
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #14 : Iunie 03, 2009, 20:05:03 »

am citit articolul dar tot nu m-am lamurit de ce nu merge ......  Brick wall
..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 ? ... Very Happy
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #15 : 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, si aici 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.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines