m programa usa diferentes regiões da memória para objetos estáticos, automáticos e objetos alocados dinamicament
Estou seguindo o livro "C Primer Plus" e encontre um problema para entender as regiões da memória. No livro, ele afirma:
Normalmente, um programa usa diferentes regiões da memória para objetos estáticos, automáticos e objetos alocados dinamicamente. A Listagem 12.15 ilustra esse ponto.
// where.c -- where's the memory?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int static_store = 30;
const char * pcg = "String Literal";
int main(void)
{
int auto_store = 40;
char auto_string[] = "Auto char Array";
int *pi;
char *pcl;
pi = (int *) malloc(sizeof(int));
*pi = 35;
pcl = (char *) malloc(strlen("Dynamic String") + 1);
strcpy(pcl, "Dynamic String");
printf("static_store: %d at %p\n", static_store, &static_store);
printf(" auto_store: %d at %p\n", auto_store, &auto_store);
printf(" *pi: %d at %p\n", *pi, pi);
printf(" %s at %p\n", pcg, pcg);
printf(" %s at %p\n", auto_string, auto_string);
printf(" %s at %p\n", pcl, pcl);
printf(" %s at %p\n", "Quoted String", "Quoted String");
free(pi);
free(pcl);
return 0;
}
Execute o código e obtenha:
static_store: 30 at 0x10a621040
auto_store: 40 at 0x7ffee55df768
*pi: 35 at 0x7fbf1d402ac0
String Literal at 0x10a620f00
Auto char Array at 0x7ffee55df770
Dynamic String at 0x7fbf1d402ad0
Quoted String at 0x10a620f9b
conclusão do livro:
Como você pode ver, dados estáticos, incluindo literais de seqüência de caracteres, ocupam uma região, dados automáticos em uma segunda região e dados alocados dinamicamente em uma terceira região (geralmente chamada de pilha de memória ou armazenamento gratuito
Eu poderia descobrir que eles são de endereços diferentes. Como posso garantir que eles são de diferentes regiões?