Este artículo describe la implementación de malloc y su malloc en la operación de expansión del montón, y analiza cómo se realiza la asignación de la dirección virtual a la dirección física.
orden original, enlace original: http://blog.csdn.net/ordeder/article/details/41654509
1 conocimiento previo
1.1 espacio de usuario del proceso < Br>
Figura 1: Fuente http://www.open-open.com/lib/view/open1409716051963.html
La estructura se define mediante el proceso task_struct.mm_struct mm_struct se define de la siguiente manera:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 struct mm_struct {struct vm_area_struct * mmap; /* lista de VMA * /... pgd_t * pgd; //para el mapeo de direcciones atomic_t mm_users; /* ¿Cuántos usuarios con espacio de usuario? * /atomic_t mm_count; /* ¿Cuántas referencias a " struct mm_struct " ( Usuarios coun t como 1) * /int map_count; /* número de VMAs * /... //Describa la distribución de segmentos del espacio de usuario: segmento de datos, segmento de código, segmento de pila sin firmar long_code start, end_code, start_data, end_data; unsigned long start_brk, Brk, start_stack; unsigned long arg_start, arg_end, env_start, env_end; unsigned long rss, total_vm, locked_vm; ...};
El startxxx y el endxxx en la estructura describen el segmento de datos del espacio del usuario del proceso Direccion Para el espacio de almacenamiento dinámico, start_brk es la dirección de inicio del espacio de almacenamiento dinámico, y el almacenamiento dinámico se amplía. Para la extensión del espacio del montón del proceso, brk registra la posición superior del montón. El espacio de direcciones (la variable que se usa) del espacio aplicado dinámicamente por el proceso se asigna, y estos espacios de direcciones se registran en la estructura de lista vinculada vm_area_struct * mmap.
1.2 Asignación de direcciones
Asignación de direcciones virtuales y direcciones físicas: http://blog.csdn.net/ordeder/article/details/41630945
< H1> 2 malloc y free
malloc es la interfaz de funciones para la extensión del montón de espacio del usuario. Esta función es una biblioteca C que pertenece a la función de biblioteca glibc que encapsula la llamada al sistema relevante (brk ()). En lugar de una llamada del sistema (el sistema no puede tener sys_malloc (). Si habla de las operaciones del núcleo del sistema involucrado en la función malloc, el conjunto puede dividirse en nivel de espacio de usuario y nivel de espacio de núcleo.
2.1 Capa de usuario < Br>
El código fuente de malloc está visible en http://repo.or.cz/w/glibc.git/blob/HEAD:/malloc/malloc.c
Malloc y gratis Funciona a nivel de usuario, lo que proporciona al usuario una interfaz que es más conveniente para administrar el montón. Su trabajo principal es mantener una lista de búferes de espacio de montón libre. El búfer se puede expresar en la siguiente estructura de datos:
? 1 2 3 4 5 6 7 8 9 struct malloc_chunk {INTERNAL_SIZE_T prev_size; /* Tamaño del fragmento anterior (si es gratis). * /INTERNAL_SIZE_T size; /* Tamaño en bytes, incluidos los gastos generales. * /struct malloc_chunk * Fd; /* enlaces dobles: solo se utilizan si son gratuitos. * /Struct malloc_chunk * bk; /* Solo se utiliza para bloques grandes: puntero al siguiente tamaño más grande. * /Struct malloc_chunk * fd_nextsize; /* enlaces dobles: solo se utiliza si está libre. * /Struct malloc_chunk * bk_nextsize;};
< Br>
La versión simplificada de la lista de búferes libres se muestra a continuación. La cabecera es la estructura malloc_chunk descrita anteriormente. El área de memoria del tamaño del siguiente tamaño es el área de datos correspondiente al fragmento.
[malloc]
Siempre que un proceso llama a malloc, primero busca un bloque de memoria de tamaño suficiente en el búfer del montón para asignarlo al proceso (el bloque en el búfer tiene el primer golpe y Mejor golpeó dos algoritmos). Si freechunklist ya no puede satisfacer la porción requerida, entonces malloc expandirá el montón del espacio de proceso llamando al sistema llamada brk (), creará una nueva porción en el espacio de pila recién expandido y lo agregará a la lista gratuita. Este proceso es equivalente a El proceso por lotes quiere que el sistema solicite un pedazo de memoria (el tamaño puede ser mucho más grande que la demanda real).
La dirección devuelta por malloc es la primera dirección en el fragmento utilizado para almacenar datos, es decir: chunk + sizeof (chunk)
Un simple pseudo primer golpe de malloc Código:
Sistema operativo: Centos6 1.Descubrir el problema ping es grave la pérdida de paquete de red, h
Hablando de la forma más fácil de instalar un sistema es encontrar un CD de instalación del
ubuntu dispuestos libre contraseña SSH 1, la instalación de SSH: 2, si se debe gene
Uno: el esquema de ssh es: 1, es permitir el uso de ssh entre dos máquinas Linux no requiere un
Uso de git y github tutorial en Linux VM
Cómo ver la aplicación del disco duro del disco duro en Linux
Servicio Linux Servicio NFS y SAMBA
Construcción de servidor LinuxSVN
Configuración de Linux múltiple IP
Cómo funciona el comando de ruta de linux
Descriptores de archivo en la programación del servidor
Cómo configurar el método de entrada chino en el entorno Linux
Win7 registro de optimización para resolver fallas informáticas tutorial
¿Cómo liberar el modo de seguridad win7? El modo de seguridad del sistema Win7 no se puede resolver
"Memoria insuficiente" cómo resolver
Le enseñamos a configurar fácilmente la contraseña del controlador de dominio de Win 2003
El doble clic del sistema Win10 no puede abrir la solución de archivo EXE
Las características de la biblioteca de Windows 7 hacen que los archivos ya no sean desordenados
Cómo configurar win8 para que llegue a