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(float));
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;
}