#include <stdio.h>
#include <stdlib.h>

int global_var = 42;         // .data
static int static_var = 7;   // .data
int uninit_var;              // .bss
const int const_var = 99;    // .rodata

int main() {
    int local_var = 10;                  // stack
    static int static_main = 5;          // .data
    int *heap_var = malloc(sizeof(int)); // heap

    *heap_var = 123;

    printf("local_var  : %p : %d\n", &local_var, local_var);
    printf("*heap_var  : %p : %d\n", heap_var, *heap_var);
    printf("uninit_var : %p : %d\n", &uninit_var, uninit_var);
    printf("static_main: %p : %d\n", &static_main, static_main);
    printf("static_var : %p : %d\n", &static_var, static_var);
    printf("global_var : %p : %d\n", &global_var, global_var);
    printf("const_var  : %p : %d\n", &const_var, const_var);

    // Código da função main (.text)...
    printf("main()     : %p\n", &main);

    // Pausa para análise na linha de comandos...
    puts("Tecle algo para terminar...");
    getchar();
    
    free(heap_var);
    
    return 0;
}
