Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

312
Visualizações
malloc y heap: ¿memoria adicional para almacenar el tamaño y la información de la lista vinculada?

Tengo una pregunta simple sobre el heap y malloc :

Cuando asignamos algo de espacio de memoria usando malloc de la siguiente manera:

 int *p; p = (int*) malloc (10*sizeof(int));

En realidad, asigna 10 palabras en el montón. Sin embargo, mi pregunta es:

¿El espacio de memoria real utilizado es realmente de 10 palabras?

¿O se necesita otro espacio adicional para almacenar el valor del tamaño de la memoria?

O, incluso, debido a que el montón está estructurado como una lista enlazada , ¿se está utilizando otro espacio de memoria para almacenar la dirección que apunta al siguiente nodo de la lista en el montón?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Es completamente dependiente de la implementación.

a) Podría tener algunos bytes antes de cada nodo asignado que contiene el tamaño del nodo, el puntero al siguiente nodo y tal vez un puntero de nodo anterior y el tipo de nodo.

b) El artículo devuelto no puede tener nada más alrededor que otras asignaciones. Una estructura en otro lugar realiza un seguimiento de lo que se asigna y lo que está libre, quizás mediante un mapa de bits o una lista paralela en miniatura.

c) Otra variación proporciona varias matrices de fragmentos de tamaño fijo. Una matriz puede proporcionar bloques de 32 bytes; otros bloques de 128 bytes, etc. Un mapa de bits para cada matriz gestiona las asignaciones.

d) La implementación más mínima que he visto ignora completamente free() (es decir, free() no tiene ninguna operación) y asigna la siguiente pieza del grupo en cada malloc() .


Con mucho, la técnica moderna más utilizada es un . La variante b se usa en muchos sistemas de archivos como NTFS y FAT. La opción c fue/es favorecida en muchos sistemas operativos DEC, especialmente para el uso del kernel. La opción d es utilizada por algunos entornos integrados minimalistas con una advertencia adecuada.

En la mayoría de las implementaciones, la asignación solicitada se redondea a algún múltiplo natural (generalmente de 2, 8, 16, etc.) conveniente para el algoritmo. Entonces, una serie de asignaciones de 5, 3, 8, 7, 4, 1 y 15 podría considerarse cada una como una solicitud de 16 bytes.

over 4 years ago · Santiago Trujillo Relatório

0

La asignación de memoria depende de las bibliotecas del compilador y del sistema operativo.

Ambos idiomas no establecen una cantidad máxima de memoria que se puede asignar. Todo lo que tiene garantizado es el tamaño solicitado.

Entonces, si hay alguna memoria adicional asignada, dependería de la plataforma.

Además, puede haber menos gastos generales al asignar espacios más grandes.

Intente escribir su propio asignador de memoria y vea qué se necesita, especialmente al desechar la memoria.

over 4 years ago · Santiago Trujillo Relatório

0

Sí, es posible que una implementación de malloc realmente asigne un poco más de memoria de la que solicitó, almacene el tamaño de la memoria asignada al comienzo de la memoria asignada y luego le brinde un puntero a la siguiente dirección de memoria inmediata. Cuando llame a free en ese puntero, el asignador retrocederá un poco, leerá el tamaño del búfer y calculará cuánto necesita liberar realmente.

Pero, por supuesto, otra posible implementación podría mantener una lista, o un diccionario, o hacer algo completamente diferente bajo el capó, siempre que le proporcione el mismo comportamiento especificado.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda