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;
}