2011-10-30 20 views
7

Algunas veces usamos este tipo de código en nuestra programación c.¿Dónde se almacenará una cadena constante en la memoria?

char *p = "Sam"; 

Aquí la dirección de la cadena de caracteres constantes "Sam" se almacenará en el puntero char p. ahora aquí
quiero preguntar dónde se va a guardar el Sam?

+0

posible duplicado de [¿Dónde están las variables constantes almacenadas en C?] (http://stackoverflow.com/questions/1576489/where-are-constant-variables-stored-in-c) –

+0

@BrianRoach Un literal de cadena no es una variable constante. –

Respuesta

9

La norma no especifica esto. Normalmente, el literal de cadena ("Sam") se almacenará en la sección de datos, en una página de solo lectura.

En cuanto a p, depende de si es automático o estático.

+0

donde se almacenan automáticos y globales? –

+2

@ Mr.32 Las variables automáticas se almacenan en la pila. Las variables "globales" o estáticas se almacenan en 'datos' (o quizás' bss'). – cnicutar

+1

¿En qué arquitectura hay páginas de solo lectura en una sección 'datos'? En Linux/ELF, los literales de cadena se almacenan con otros datos de solo lectura y sin código en la sección 'rodata', que está en el mismo segmento que' text'. –

8

La cadena "Sam" generalmente se almacenará en la memoria global en la misma región que las constantes globales.

Sin embargo, si se hizo esto:

char p[] = "Sam"; 

Entonces sería en la pila en su lugar. (como un inicializador de matriz)

Cuestiones relacionadas