Curso-lenguaje-C/fundamentos-programacion/PEC2/README.md
2024-03-17 11:57:16 +01:00

3.5 KiB

PEC 2

Índice

4. Estructura de memoria

Conceptos básicos de los efectos que produce un programa en la memoria.

4.1. Memoria

Un programa no se ejecuta desde el disco, sino que se carga en la memoria RAM (Random Access Memory). La memoria es un recurso finito y limitado, por lo que es importante gestionarla de forma eficiente. Por este motivo, el SO se encarga de ir moviendo los programas entre la memoria y el disco, pero desde la vista del programador debemos entender que el programa siempre está cargado en memoria.

Cada posición está identificada unívocamente con un valor numérico (su dirección) y tiene capacidad de 8 bytes.

Cuando asignamos un valor (constante o variable) se asigna un rango de direcciones donde pondrá su valor.

4.1.1. Información y espacio

Tipo Tipo C Tamaño en bytes Rango de valores
Entero char 1 -128 to 127 o 0 to 255
Entero unsigned char 1 0 a 255
Entero signed char 1 -128 a 127
Entero int 2 o 4 -32,768 a 32,767 o -2,147,483,648 a 2,147,483,647
Entero unsigned int 2 o 4 0 a 65,535 o 0 a 4,294,967,295
Entero short 2 -32,768 a 32,767
Entero unsigned short 2 0 a 65,535
Entero long 4 -2,147,483,648 a 2,147,483,647
Entero unsigned long 4 0 a 4,294,967,295
Real float 4 1.2E-38 a 3.4E+38 -> 6 decimales
Real double 8 2.3E-308 a 1.7E+308 -> 15 decimales
Real long double 10 3.4E-4932 a 1.1E+4932 -> 19 decimales

En los casos con dos opciones de tamaño es porque depende del sistema operativo y del compilador. En general, en sistemas de 32 bits, int y long son de 4 bytes, mientras que en sistemas de 64 bits, int es de 4 bytes y long es de 8 bytes.

Con la instrucción sizeof se puede obtener el tamaño en bytes de un tipo de dato.

#include <stdio.h>
#include <float.h>
int main() {
  printf("Storage size for float : %d \n", sizeof(oat));
  printf("Minimum float positive value: %E\n", FLT_MIN );
  printf("Maximum float positive value: %E\n", FLT_MAX );
  printf("Precision value: %d\n", FLT_DIG );

  return 0;
}

4.2. Memoria estática

4.3 Relación entre objetos y memoria

4.4. El tipo puntero en C

4.4.1. Declaración

4.4.2. Operaciones

4.4.2.1. Asignación
4.4.2.2. Contenido