Come vengono implementati [] e malloc nuovi in Windows? [chiuso]

1

Quindi quando chiami malloc o new [] dalla tua applicazione C / C ++, in che modo il CRT lo traduce in chiamate API Windows?

    
posta CS01 18.08.2012 - 08:51
fonte

2 risposte

2

Dipende se sei in modalità debug o release. In modalità di rilascio, come ha detto Pedro, c'è HeapAlloc / HeapFree che sono funzioni del kernel,

mentre è in modalità debug (con visual studio) c'è una versione scritta di free e malloc (a cui new / delete è reindirizzato) con lock di thread e più eccezioni di rilevamento, in modo che tu possa rilevare più facilmente quando ha fatto alcuni errori con i puntatori dell'heap durante l'esecuzione del codice in modalità di debug. Questo è un motivo in più per cui un codice compilato in modalità di debug è più lento.

Penso che sia l'unica API che viene "simulata" in questo modo in modalità di debug.

Basta fare un passo nel debugger per capire come funziona, se ricordo bene questa versione di debug usa somes tree di double link lists.

E questo è anche con questo tipo di riscrittura di malloc / free che funzionano gli analizzatori del consumo di memoria: c'è uno strumento per questo in Visual Studio che usa un altro .dll come implementazione di funzioni di allocazione che notano un altro programma di analisi dei dati ogni volta che vengono chiamati.

    
risposta data 09.08.2015 - 07:54
fonte
4

Windows ha una funzione HeapAlloc nell'API win32, forse è usata.

Il punto principale è che questo non è tanto legato a Windows quanto all'implementazione C o C ++. Implementano malloc e come funziona il nuovo. Dovresti quindi scoprire come vengono implementati malloc e new, ad esempio Visual C ++.

Non sono un esperto in C ++, ma iirc, puoi sovraccaricare nuovo; quindi potrebbero essercene altri in corso.

    
risposta data 24.08.2012 - 01:39
fonte

Leggi altre domande sui tag