Sí, estoy tomando un curso de sistemas informáticos. Tuve algunas preguntas sobre los diversos esquemas de asignación para implementar malloc. Para listas explícitas, si implemento malloc usando una pila tipo LIFO, ¿cuál es exactamente el propósito de tener punteros a la memoria liberada anterior? ¿Por qué necesitas listas doblemente vinculadas? ¿Las listas vinculadas por separado no funcionarían igual de bien?Esquemas de asignación de Malloc
Malloc lecture. Encontré este enlace en línea, puede ver la diapositiva 7 para ver de qué estoy hablando.
Al observar un esquema de asignación de listas segregadas, estas listas son unidireccionales, ¿verdad? Y también, ¿qué es exactamente el mecanismo de coalescencia? Como por ejemplo, si se liberan 4 palabras, ¿intentarías unirte primero al espacio libre a tu alrededor antes de volver a insertarlo en la respectiva lista de enlaces segregados? ¿O simplemente insertarías el bloque de 4 palabras en la sección '4 palabras' de la respectiva lista enlazada segregada?
Gracias.
Creo que veo lo que dices, pero ¿puedes dar más detalles sobre la falta de necesidad de mantener un puntero? Además, si llamo a un bloque libre B. ¿Asumimos que B-> siguiente-> prev = B? Porque si este no es el caso, no veo cómo las listas doblemente vinculadas podrían ayudar. Además, ¿cuál sería la mejor manera de inicializar el montón en un asignador de listas segregadas? ¿Particionarías la página en algún patrón? (Como dar 64 bloques libres de 2 palabras, 64 bloques libres de 4 palabras, 64 bloques libres de 8 palabras ... hasta llegar a la categoría de infinito designada? ¿O hay una mejor manera de inicializar? – de1337ed
@ de1337ed: Tal vez usted tiene ¿No está escrito ningún código de procesamiento de lista de nodos? Dale un giro: escribe una función que inserta un nodo en una lista vinculada.Mantenga la lista en la dirección = orden ordenado. Pruébalo con un solo enlace. Y luego modificarlo por doblemente vinculado. (Para responder a su pregunta 'B-> siguiente-> anterior' es * siempre * B. Si no lo es, hay un error.) Inicializar el montón está sujeto a las decisiones de política del implementador: ¿debería haber un montón de ¿Bloques de 512 bytes listos para funcionar? Depende del sistema – wallyk