Notas de autocultivo del programador: Capítulo 10

Capítulo 10 Memoria
1. Convenciones de llamada
Una convención de llamada generalmente estipula los siguientes aspectos:
el orden y método de pasar parámetros de función:
el orden en el que los parámetros se insertan en la pila Algunas convenciones también permiten el uso de registros para pasar parámetros.
Cómo mantener el sitio:
si la ventana emergente de parámetros la realiza la persona que llama a la función o la función misma;
estrategia de modificación del nombre
; transferencia del valor de retorno de la función

2. Montón
: el programa solicita un espacio de montón de tamaño apropiado al sistema operativo y luego administra este espacio por sí mismo. Este programa suele ser la biblioteca de tiempo de ejecución del programa.
3. Hay dos llamadas al sistema para la asignación de espacio en Linux, una es brk () y la otra es mmap ().
brk () es establecer la dirección final del segmento de datos (bss + segmento de datos) y mover la dirección final del segmento de datos a una dirección superior, luego la parte expandida del espacio es el espacio del montón. glibc también tiene una función sbrk(), que es similar a brk, excepto que sbrk() usa un incremento (puede ser positivo o negativo) y el valor de retorno es la dirección final del segmento de datos incrementado, que en realidad es un contenedor. para brk().
mmap() es similar a VirtualAlloc() en Windows. Solicita un espacio de direcciones virtuales del sistema operativo y puede asignar este espacio a un archivo. Cuando no está asignado a un archivo, lo llamamos espacio de nombres anónimo.
void* mmap(
void* inicio,
size_t longitud,
int prot,
int flags,
int fd,
off_t offset);

glibc tiene dos métodos para las solicitudes de espacio de los usuarios: para solicitudes de menos de 128 KB, le asignará espacio de acuerdo con el algoritmo del montón dentro del espacio existente y lo devolverá; para solicitudes de más de 128 KB, utilizará mmap para asignar un espacio anónimo. espacio para él y luego asigna espacio para el usuario en este espacio anónimo.
El tamaño máximo de la aplicación para el espacio del montón depende de muchos factores. Por ejemplo, la versión del kernel es diferente y existen limitaciones de recursos del sistema, la suma de la memoria física y el espacio de intercambio.
El proceso de WINDOWS en WINDOWS asigna espacio de direcciones a varios archivos EXE, DLL, montones y pilas. Y gracias a la biblioteca de tiempo de ejecución de WINDOWS, un proceso tiene múltiples subprocesos y múltiples pilas. Después de la asignación, el espacio de direcciones del proceso de Windows ya está fragmentado. Cuando el programa solicita espacio del sistema, se asigna a partir de las direcciones restantes desocupadas. Cuando VirtualAlloc() solicita espacio, el tamaño del espacio debe ser un múltiplo entero de la página.
La implementación del algoritmo de asignación de montón en Windows se encuentra en el administrador de montón, que proporciona un conjunto de API relacionadas con el montón para crear, asignar, liberar y destruir espacio de montón:
HeapCreate
HeapAlloc
HeapFree
HeapDestroy

3. Algoritmo de asignación del montón
Lista enlazada libre:
al principio o al final de cada espacio libre en el montón, hay una estructura de encabezado que registra la dirección del espacio libre anterior o siguiente.
La desventaja es que una vez que se destruye el medidor o los cuatro bytes de la longitud del registro, todo el montón no puede funcionar correctamente.
Mapa de bits:
divide todo el montón en una gran cantidad de bloques. Cada bloque tiene el mismo tamaño. Cuando el usuario solicita memoria, siempre se asigna un número entero de bloques al usuario. El primer bloque es el encabezado y los bloques restantes son el cuerpo Por lo tanto, solo utilice una matriz de números enteros para registrar el uso de la reunión.
La ventaja es que es rápido, estable y fácil de gestionar sin requerir información adicional. La desventaja es que es fácil que se produzca fragmentación al asignar memoria, y si el montón es grande o el conjunto es pequeño, entonces Rittal será muy grande y se puede perder la ventaja de una alta tasa de aciertos de caché.

Supongo que te gusta

Origin blog.csdn.net/weixin_45719581/article/details/123207766
Recomendado
Clasificación