#include <malloc.h>
int main()
{
int a;
void *p[65536];
p[0]=malloc(4096);
getchar();
for (a=1;a<65536;a++)
{
p[a]=malloc(4096);
p[a-1]=realloc(p[a-1],1);
}// 4096+a a lefoglalt memoria, topot sasolni, a*4096 megy el valójában.
getchar();
for (a=0;a<65536;a++)
{
free(p[a]);
}
getchar();
return 0;
}
Igy kell fregmentalni. (0.1% alatt van a hasznos memoria)
Elsore jo taktikanak tunhet amit reallocal művel az ember, tul foglalja memet aztan szugsegesre kicsinyiti ,valojaban nem mindig olyan jo dolog az.
Az is jó ötletnek tűnik, hogy a realloc ne mozgasa át a memoriat (copy megsporolása), ha nem szükséges (kisebb területre váltáskor nem teszi).
Aki ezeket nem tudja..
szerk:
az biztos c++-ban máskép kodól, mint c -ben :)