Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Memoria folosita de un program  (Citit de 5059 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
VladS
Vizitator
« : Februarie 21, 2006, 20:23:05 »

Cum pot verifica daca un program nu depaseste o anumita limita de memorie (segm de date / stiva )?
Memorat
StTwister
Client obisnuit
**

Karma: 11
Deconectat Deconectat

Mesaje: 86



Vezi Profilul
« Răspunde #1 : Februarie 21, 2006, 21:15:46 »

Pe Windows, poti sa te uiti in Task Manager la procesul respectiv, insa nu poti sa vezi separat memorie alocata stivei si memorie alocata segmentului de date. Totusi, cel mai simplu e sa-ti estimezi tu memoria pe care o va utiliza adunand memoria ocupata de variabile + marimea exectuabilului in forma finala. Mai nasol este cu calculatul memoriei care va fi alocata pe stiva. Insa atat timp cat nu ai variabile locale de tip array in subprograme, nu e nicio problema...

Oricum de obicei problemele sunt astfel concepute incat sa nu existe probleme cu depasirea limitei de memorie
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #2 : Februarie 23, 2006, 22:07:51 »

Citat din mesajul lui: StTwister
Oricum de obicei problemele sunt astfel concepute incat sa nu existe probleme cu depasirea limitei de memorie


Nu chiar... Unele probleme pot avea mai multe solutii, iar o solutie neoptima sa nu se incadreze in limita de memorie. Deci pentru o solutie neoptima e important sa stii cata memorie folosesti.
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
StTwister
Client obisnuit
**

Karma: 11
Deconectat Deconectat

Mesaje: 86



Vezi Profilul
« Răspunde #3 : Februarie 23, 2006, 22:58:52 »

Bine bine, atunci "in general" (90%) din cazuri algoritmul se incadreaza in memorie. Totusi, 64 MB e destul de mult!
Memorat
alberte
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 11



Vezi Profilul WWW
« Răspunde #4 : Februarie 24, 2006, 15:48:49 »

Eu am facut o problema in free pascal, pe care mi-a compilat-o perfect, dar cand am trimis-o la evaluare, nu a trecut de compilare.
    Mi-am dat seama ca este din cauza segmentului de date folosit, foloseam prea multa memorie.
    As vrea sa stiu si eu cum pot schimba dimensiunea memoriei folosite, astfel incat sa corespunda cu cea de pe infoarena (adica 63 MB pt. segmentul de date si 1 MB stiva)?
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #5 : Februarie 26, 2006, 10:15:48 »

Citat din mesajul lui: VladS
Cum pot verifica daca un program nu depaseste o anumita limita de memorie (segm de date / stiva )?


Partea de stiva e mai greu sa iti dai seama cata memori foloseste, dar la Partea de date, poti sa te folosesti de un mic "truc" Smile
cand compilezi in Windows, executabilul creat are dimensiunea aproximativ egala cu cata memorie ai alocata static Smile (e mai prost Windowsul la alocarea memoriei statice, si de asta ii trebuie in executabil..)
Deci daca nu aloci dinamic, te uiti la dimensiunea executabilului..
Alta metota ar fi sa faci programul sa afiseze cata memorie are ocupata Smile Dar asta inseamna sa iei fiecare variabila si sa adaugi la suma sizeof()-ul ei..

--> in Task Manager vezi memoria totala ocupata (parca), dar trebuie sa iti pui un "stop" in program ca sa apuci sa vezi cata memorie foloseste Smile
Memorat
cristi8
Vizitator
« Răspunde #6 : Februarie 26, 2006, 11:58:26 »

Cred ca VladS vrea sa faca un evaluator care limiteaza automat memoria folosita de program (cum se face la evaluatoarele astea online, de iti da M.L.E.)..
ar fi interesant de stiut.. stie cineva ? (in special echipa infoarena, care au un evaluator)
Memorat
VladS
Vizitator
« Răspunde #7 : Februarie 26, 2006, 12:27:21 »

Aveam un program in care alocam memorie dinamic cu stl si era destul de greu de calculat. S-a rezolvat intre timp. Am luat jlaunch.cpp de pe forum (acuma se pare ca nu mai e). Acolo sunt doua variabile : dimensiunea segmentului de date si stivei; si daca iti depaseste limitele alea ti-l omoara automat.
Memorat
cristi8
Vizitator
« Răspunde #8 : Februarie 26, 2006, 18:28:14 »

chiar, a murit linkul acela. mai puneti pe undeva jlaunch.cpp pentru cei care vor sa-si faca unelte de programare pe-acasa ?
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #9 : Februarie 26, 2006, 18:42:23 »

Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #10 : Februarie 27, 2006, 11:31:05 »

Citat din mesajul lui: svalentin
Citat din mesajul lui: VladS
Cum pot verifica daca un program nu depaseste o anumita limita de memorie (segm de date / stiva )?


Partea de stiva e mai greu sa iti dai seama cata memori foloseste, dar la Partea de date, poti sa te folosesti de un mic "truc" Smile
cand compilezi in Windows, executabilul creat are dimensiunea aproximativ egala cu cata memorie ai alocata static Smile (e mai prost Windowsul la alocarea memoriei statice, si de asta ii trebuie in executabil..)
Deci daca nu aloci dinamic, te uiti la dimensiunea executabilului..


Fie ca declar o matrice 1000x1000 fie ca declar o matrice 10x10 aceeasi dimensiune are executabilul meu  Raised eyebrow De unde ai auzit chestia asta?  Neutral
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #11 : Februarie 27, 2006, 13:00:00 »

mie asa imi face Smile
de exemplu
Cod:
#include<stdio.h>

int a[1000][1000];

int main(void)
{
   printf("1234");
   return 0;
}
scoate 4,154,522 bytes

Cod:
#include<stdio.h>

int a[1000][1000];
int b[1000][1000];

int main(void)
{
   printf("1234");
   return 0;
}
scoate 8,154,284 bytes

insa e ciudat, vad ca
Cod:
int a[1000][1000];
int b[1000][1000];

int main(void)
{
   return 0;
}
scoate 68,831 bytes..

cred ca compilatorul mai face el niste optimizari ceva.. Smile
am GCC 4.0.1

.. ne mai uitam la liceu impreuna, cand ne mai intalnim Wink
Memorat
azotlichid
Echipa infoarena
Nu mai tace
*****

Karma: 50
Deconectat Deconectat

Mesaje: 260



Vezi Profilul
« Răspunde #12 : Februarie 27, 2006, 16:02:10 »

Cu ce optiuni compilezi, omule?  E bizar ce zici tu ... Raised eyebrow
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #13 : Februarie 27, 2006, 18:09:44 »

gpp x.cpp -o x.exe
bizar sau nu.. mie asa imi face.. daca aveti idee de ce, ascult. Vrei si screenshot acum?! Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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