Definición
El proceso de reservar y asignar regiones de memoria a programas, estructuras de datos o servicios del kernel, ya sea en tiempo de compilación, carga o ejecución, incluyendo la reserva de rangos de direcciones virtuales y su mapeo a memoria física o almacenamiento de respaldo.
Principio
Principio
La asignación sigue políticas y estrategias que gobiernan dónde y cuánto memoria proporcionar: estática vs automática (pila) vs dinámica (heap); unidades y alineación de asignación; first‑fit, best‑fit, sistemas buddy, allocators tipo slab, asignación por región/bump; y consideraciones sobre fragmentación, localidad y control de concurrencia.
Demostración
Demostración
Ejemplos concretos: malloc/free y new/delete en C/C++; implementaciones de malloc usando first‑fit o allocators slab para objetos; allocators del SO que mapean páginas virtuales a marcos físicos; allocators por región usados para temporales de compilador; allocators locales por hilo para reducir contención en aplicaciones multihilo.
Aplicación incorrecta
Aplicación incorrecta
Confundir asignación con inicialización o disponibilidad inmediata — asignar memoria no garantiza contenidos inicializados. Suponer que la asignación es barata e imperceptible (ignorar fallos de página, presión de TLB o provisionamiento físico perezoso). No considerar fragmentación y requisitos de alineación conduce a desperdicio de memoria o pérdida de rendimiento.
Consecuencia
Consecuencia
La estrategia de asignación afecta directamente la latencia de solicitudes, fragmentación de memoria, localidad de caché, rendimiento bajo concurrencia y facilidad de recuperación; buenos allocators mejoran rendimiento y seguridad, malas decisiones causan fragmentación, contención y latencias impredecibles.
Inversión
Inversión
Preasignar buffers fijos, asignación estática en tiempo de compilación o uso de archivos mapeados coloca las decisiones de asignación antes o fuera del allocator runtime, cambiando flexibilidad por predictibilidad y potencialmente menor overhead en tiempo de ejecución.
Límite
Límite
Se aplica a la gestión de memoria volátil principal y allocators runtime, reserva de direcciones virtuales y allocators de kernel/usuario. Excluye semánticas de asignación de almacenamiento persistente a largo plazo (sistemas de archivos, object stores) salvo si su asignación interactúa con el mapeo de memoria virtual; excluye la asignación de recursos puramente conceptuales no relacionada con memoria.
Tensión semántica
Tensión semántica
Tensión entre la asignación dinámica flexible (expresividad máxima) y la asignación estática/determinista (predictibilidad y bajo overhead); otra tensión es entre allocators de uso general y pools específicos de aplicación que optimizan cargas particulares.
Síntesis
Síntesis
La asignación de memoria es el conjunto de políticas y mecanismos que reservan regiones de direcciones y se las entregan a programas o al kernel, equilibrando fragmentación, localidad, concurrencia y predictibilidad mediante estrategias que van desde allocators bump/por región hasta sistemas slab/buddy y el mapeo de páginas por el SO.