1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Demonstrate Memcheck correctly handling chain of 64 recursive 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown calls, each of which allocates a 1 M array on the stack. Requires 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown --main-stacksize=67117057 (on amd64-linux) or above, but works fine 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if you specify that. */ 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define N_MBYTES 64 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define N_INTS_PER_MBYTE (1048576 / sizeof(int)) 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint rec ( int depth ) 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i, zzz; 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int arr[N_INTS_PER_MBYTE]; 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (depth == 0) return 0; 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < N_INTS_PER_MBYTE; i++) 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arr[i] = i * depth; 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown zzz = rec(depth-1); 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < N_INTS_PER_MBYTE; i++) 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown zzz += arr[i]; 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return zzz; 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int sum; 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "lsframe2: start\n"); 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sum = rec(N_MBYTES); 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "lsframe2: done, result is %d\n", sum); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 35