infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: VladS din Februarie 21, 2006, 20:23:05



Titlul: Memoria folosita de un program
Scris de: VladS din Februarie 21, 2006, 20:23:05
Cum pot verifica daca un program nu depaseste o anumita limita de memorie (segm de date / stiva )?


Titlul: Memoria folosita de un program
Scris de: Kerekes Felix din 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


Titlul: Memoria folosita de un program
Scris de: Stefan Istrate din 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.


Titlul: Memoria folosita de un program
Scris de: Kerekes Felix din 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!


Titlul: Setarea limtelor de memorie
Scris de: Machu Picchu din 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)?


Titlul: Re: Memoria folosita de un program
Scris de: Valentin Stanciu din 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" :)
cand compilezi in Windows, executabilul creat are dimensiunea aproximativ egala cu cata memorie ai alocata static :) (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 :) 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 :)


Titlul: Memoria folosita de un program
Scris de: cristi8 din 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)


Titlul: Memoria folosita de un program
Scris de: VladS din 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.


Titlul: Memoria folosita de un program
Scris de: cristi8 din 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 ?


Titlul: Memoria folosita de un program
Scris de: Cristian Strat din Februarie 26, 2006, 18:42:23


Titlul: Re: Memoria folosita de un program
Scris de: Bogdan-Cristian Tataroiu din 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" :)
cand compilezi in Windows, executabilul creat are dimensiunea aproximativ egala cu cata memorie ai alocata static :) (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  :eyebrow: De unde ai auzit chestia asta?  :|


Titlul: Memoria folosita de un program
Scris de: Valentin Stanciu din Februarie 27, 2006, 13:00:00
mie asa imi face :)
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.. :)
am GCC 4.0.1

.. ne mai uitam la liceu impreuna, cand ne mai intalnim ;)


Titlul: Memoria folosita de un program
Scris de: Adrian Vladu din Februarie 27, 2006, 16:02:10
Cu ce optiuni compilezi, omule?  E bizar ce zici tu ... :eyebrow:


Titlul: Memoria folosita de un program
Scris de: Valentin Stanciu din 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?! :)