Läs C: addendum om stack & heap
Pröva gärna också att t.ex. jämföra prestanda mellan ett program som allokerar mycket på stacken med ett som allokerar mycket på heapen (t.ex. genom att skriva om nedanstående rekursiva fibonacci-program där samtliga heltal mallokeras på heapen). Vad får det för effekt på uträkningens prestanda?
#include<stdio.h>
#include<stdlib.h>
int *heap_int(int i)
{
int *result = malloc(sizeof(int));
*result = i;
return result;
}
int *fib(int *n)
{
if (*n == 0)
{
return heap_int(0);
}
else
{
if (*n == 1)
{
return heap_int(1);
}
else
{
return heap_int(*fib(heap_int(*n-1)) + *fib(heap_int(*n-2)));
}
}
}
// OBSERVERA!
// Detta program läcker minne som ett såll -- det frigör inte några allokerade pekare
int main(int argc, char **argv)
{
if (argc < 2)
{
puts("Usage: ./fib-rec 5");
}
else
{
int *n = heap_int(atoi(*(argv+1)));
printf("fib(%d) = %d\n", *n, *fib(n));
}
return 0;
}
Report a bug on this achievement? Please place an issue on GitHub.