#include #include /* select 1-byte alignment for everything */ #pragma pack(1) typedef struct step { char mode; double height; } step_t; /* resume default alignments */ #pragma pack() void stack_all(step_t *steps, int num_steps) { int i, j; for (i = 0; i < num_steps; i++) for (j = i + 1; j < num_steps; j++) steps[i].height += steps[j].height; } step_t *make_steps(int num_steps) { int i; step_t *steps = (step_t *)malloc(sizeof(step_t) * num_steps); for (i = 0; i < num_steps; i++) { steps[i].mode = 0; steps[i].height = 1.0; } return steps; } int main() { int num_steps = 50000; step_t *steps; printf("%ld\n", sizeof(step_t)); steps = make_steps(num_steps); stack_all(steps, num_steps); printf("%f %f\n", steps[0].height, steps[num_steps-1].height); return 0; }