Я следую книге "C Primer Plus" и сталкиваюсь с проблемой, чтобы понять области памяти. В книге говорится:
Как правило, программа использует разные области памяти для статических объектов, автоматических объектов и динамически распределенных объектов. Этот пример показан в листинге 12.15.
// where.c -- where 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;
}
Запустите код и получите:
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
заключение книги:
Как вы можете видеть, статические данные, в том числе строковые литералы, занимают один регион, автоматические данные второй области и динамически распределяют данные в третьей области (часто называемой кучей памяти или свободным хранилищем).
Я мог понять, что они имеют другой адрес. Как я могу заверить, что они из разных регионов?