Anonymní profil Michal – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Michal – Programujte.comAnonymní profil Michal – Programujte.com

 

Příspěvky odeslané z IP adresy 90.181.50.–

Michal
C / C++ › Uvolňování paměti
22. 8. 2012   #161905

To Vitamin:
Ale program před alokací zabírá cca 300kB, v žádném případě ne 2MB. A jak říkám, když podobných alokací/uvolnění provedu hodně, tak paměť pořád roste.

To KIIV:
V C++ delam tak trochu omylem, moc v něm neumím, ale vector si vygooglím. :) Jen mi to přišlo unáhlené hledat jiné řešení, když tohle by mělo perfektně fungovat.
Zapomněl jsem tedy napsat, že dělám na win 7 64 bit a ten je na tom o dost hůře, co se týče utilit na zkoumání alokované paměti. Problém je, že se ta pamět znova nevyužije, tedy aspoň ne celá. Například jsem celý program obalil cyklem, provedl jsem ho 10 resp. 100 a zabraná paměť vzrostla na 3MB resp. 5MB.

Michal
C / C++ › Uvolňování paměti
22. 8. 2012   #161902

 Ahoj,
chtěl bych si nechat poradit ohledně alokace/uvolňování paměti v C++. Už při takhle jednoduchym programu, kde jen naalokuju paměť pro 2D pole a hned ji zase uvolňuji, mi program těsně před koncem pořád zabírá téměř 2MB paměti. Nevíte proč?

V tomhle případě by to nebyl problém, ale já to potřebuju na hlubokou rekurzi, kde mi tyhle "zbytky" po chvíli vyžerou paměť a ukončí program.

Díky, Michal

#include <stdio.h>
#include <stdlib.h>

	int ** M;
	int rozmer;
	int i, j;

int main(void){

	rozmer = 10000;

	M = (int **) calloc(rozmer, (sizeof(int *)));
	
	for (i = 0; i < rozmer; i++) {
		M[i] = (int *) calloc(rozmer, (sizeof(int)));
	}

	for ( i = 0; i < rozmer; i++){
		free(M[i]);
		M[i] = NULL;
	}
	free(M);

	return 0;

}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý