#include<stdlib.h>
#include<stdio.h>
#define BUF_SIZE 256
int a; // .bss
static int b; // .bss
int c = 3; // .data
void foo(char **output)
{
static int d = 0, e = 5; // d — .bss, e — .data
/* auto */ int f = 0; // stack
++a, ++d, ++f;
const char *fmt = "%d %d %d %d %d %d"; // .rodata
*output
= malloc(BUF_SIZE
); // heap
snprintf(*output
, BUF_SIZE
, fmt
, a
, b
, c
, d
, e
, f
); }
int main(void)
{
static char *output; // The pointer is in .bss (defaults to NULL)!
for (register int i = 0; i < 5; ++i) {
foo(&output);
}
}
I2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0ZGlvLmg+CiNkZWZpbmUgQlVGX1NJWkUgMjU2CgppbnQgYTsgIC8vIC5ic3MKc3RhdGljIGludCBiOyAgIC8vIC5ic3MKaW50IGMgPSAzOyAgICAgIC8vIC5kYXRhCgp2b2lkIGZvbyhjaGFyICoqb3V0cHV0KQp7CglzdGF0aWMgaW50IGQgPSAwLCBlID0gNTsgICAgICAgIC8vIGQg4oCUIC5ic3MsIGUg4oCUIC5kYXRhCgkvKiBhdXRvICovIGludCBmID0gMDsgICAgICAgICAgIC8vIHN0YWNrCgoJKythLCArK2QsICsrZjsKCgljb25zdCBjaGFyICpmbXQgPSAiJWQgJWQgJWQgJWQgJWQgJWQiOyAgLy8gLnJvZGF0YQoJKm91dHB1dCA9IG1hbGxvYyhCVUZfU0laRSk7ICAgICAgICAgICAgIC8vIGhlYXAKCglzbnByaW50Zigqb3V0cHV0LCBCVUZfU0laRSwgZm10LCBhLCBiLCBjLCBkLCBlLCBmKTsKfQoKaW50IG1haW4odm9pZCkKewoJc3RhdGljIGNoYXIgKm91dHB1dDsgICAvLyBUaGUgcG9pbnRlciBpcyBpbiAuYnNzIChkZWZhdWx0cyB0byBOVUxMKSEKCWZvciAocmVnaXN0ZXIgaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CgkJZm9vKCZvdXRwdXQpOwoJCXB1dHMob3V0cHV0KTsKCQlmcmVlKG91dHB1dCk7Cgl9CglleGl0KEVYSVRfU1VDQ0VTUyk7Cn0K