Entiendo que las diferentes variables dependiendo del tipo y desde donde se estén declarando se guardan en un segmento de memoria o en otro.
Corregidme si me equivoco
[Direcciones más pequeñas]
--
.text (Para instrucciones)
.data (Para variables globales y estáticas inicializadas)
.bss (Para variables globales y estáticas no inicializadas)
.heap (Uso libre para el programador. Crece hacia direcciones más altas)
.stack (Para guardar el contexto de función, variables locales, parámetros y dirección de retorno para el EIP. Crece en direcciones más pequeñas)
--
[Direcciones más altas]
He creado el siguiente codigo:
Código:
#include <stdio.h>
#include <stdlib.h>
int global_var; //.bss
int global_initialized_var = 5; //.data
void function(){
int stack_var; //Se metera en la pila.
printf("The function's stack_var is at address %p\n", &stack_var);
}
int main(){
int stack_var; // en la pila
static int static_initialized_var = 5; //en .data
static int static_var; //.bss
int *heap_var_ptr; //.heap
heap_var_ptr = (int *) malloc(4);
//.data segment
printf(".data segment\n");
printf("global_initialized_var is at address %p\n", &global_initialized_var);
printf("static_initialized_var is at address %p\n", &static_initialized_var);
//.bss segment
printf(".bss segment\n");
printf("static_var is at address %p\n", &static_var);
printf("global_var is at address %p\n", &global_var);
//.heap segment
printf(".heap segment\n");
printf("heap_var_ptr is at addres %p\n",heap_var_ptr);
//.stack segment
printf(".stack segment\n");
printf("stack_var is at address %p\n", &stack_var);
function();
}
y la salida es la siguiente:
Código:
.data segment
global_initialized_var is at address 0x804a028
static_initialized_var is at address 0x804a02c
.bss segment
static_var is at address 0x804a034
global_var is at address 0x804a038
.heap segment
heap_var_ptr is at addres 0xbfe204e8
.stack segment
stack_var is at address 0xbfe204e4
The function's stack_var is at address 0xbfe204c8
Lo que me extraña es la variable heap_var_ptr, no es raro que este a solo 4 bytes de la de stack_var?? Me da la impresión de que esta variable se está quedando en el segmento de pila en vez de en el de heap cosa que vería normal si fuera otro tipo de variable, ya que está dentro de la función main() pero al usar malloc() me parece raro que no esté en otra dirección de memoria más baja.
Gracias de antemano.