Domanda

Sono studente e voglio saperne di più sulla gestione della memoria delle dinamiche. Per C ++, Calling Operator new () può allocare un blocco di memoria sotto l'heap (negozio gratuito). In effetti, non ho un quadro completo come raggiungerlo.

Ci sono alcune domande: 1) Qual è il meccanismo che il sistema operativo può allocare un blocco di memoria ?? Come so, ci sono alcuni schemi di allocazione di memoria di base come il primo adatto, il migliore e il peggio. Il sistema operativo usa uno di essi per allocare la memoria dinamicamente sotto il heap?

2) Per una piattaforma diversa come Android, iOS, finestra e così via, sono usati diversi algoritmi di allocazione della memoria per allocare un blocco di memoria?

3) Per C ++, quando chiamo l'operatore nuovo () o Malloc (), l'allocatore di memoria alloca un blocco di memoria in modo casuale nel heap?

Spero che chiunque possa aiutarmi.

Grazie

È stato utile?

Soluzione

malloc non è una chiamata di sistema, è una libreria (libc) routine che attraversa alcune delle sue strutture interne per darti l'indirizzo di un pezzo di memoria gratuito della dimensione richiesta. Fa solo una chiamata di sistema se il segmento di dati del processo (cioè la memoria virtuale che può usare) non è "abbastanza grande" in base alla logica di malloc in questione. (Su Linux, la chiamata di sistema per ingrandire il segmento dei dati è brk)

Semplicemente detto, malloc Fornisce una gestione della memoria a grana fine, mentre OS gestisce grandi e grossi pezzi di memoria messi a disposizione di tale processo.

Non solo piattaforme diverse, ma anche librerie diverse usano diverse malloc; Alcuni programmi (ad es. python) Usa il suo allocatore interno invece in quanto conoscono i propri schemi di utilizzo e possono aumentare le prestazioni in questo modo.

C'è un artherthy articolo su Malloc a Wikipedia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top