Compile with gcc -o large large.c

Run with /usr/bin/time -f "RSS=%M" ./large

#include<stdio.h>

#define N 10

typedef struct { double a[N]; } large;

void f(large y) {

   printf("2: y.a[0]=%.2f, ..., y.a[%d]=%.2f\n",y.a[0],N-1,y.a[N-1]);

   for (int i=0; i < N; i++) y.a[i] += 3.14;

   printf("3: y.a[0]=%.2f, ..., y.a[%d]=%.2f\n",y.a[0],N-1,y.a[N-1]); 

}

void g(int n, large z) {

   if (n == 1) return;

   large w = z;

   g(n-1,w);

}

int main(void) {

   large x;

   for (int i=0; i < N; i++) x.a[i]=1.1*i;

   printf("1: x.a[0]=%.2f, ..., x.a[%d]=%.2f\n",x.a[0],N-1,x.a[N-1]);

   f(x);

   printf("4: x.a[0]=%.2f, ..., x.a[%d]=%.2f\n",x.a[0],N-1,x.a[N-1]);

   g(10000, x);

   return 0;

}

Modified version, with pointers

#include<stdio.h>

#define N 10

typedef struct { double a[N]; } large;

void g(int n, large* z) {

   if (n == 1) return;

   large w* = z;

   g(n-1,w);

}

int main(void) {

   large x;

   for (int i=0; i < N; i++) x.a[i]=1.1*i;

   g(10000, &x);

   return 0;

}