2013-08-05 18 views
10

Intervista chiesto domanda:Quante volte verrà eseguito questo ciclo?

while(1) 
{ 
void * a = malloc(1024*1024); 
} 

Quante volte questo ciclo verrà eseguito su un 2 gb ariete e un montone 8 gb?

Ho detto ciclo infinito perché non c'è condizione di terminazione anche se la memoria sarà piena. Non è d'accordo. Non ne ho idea adesso.Si prega di aiutare.

+6

@Nobilis Se la memoria è piena, 'malloc()' restituisce 'NULL'. –

+0

E perché un voto negativo ??? –

+0

@ H2CO3 Sì, ci ho pensato e in realtà non è garantito che segfault dato che la chiamata Malloc continuerà a restituire NULL, commento rimosso. – Nobilis

risposta

9

Dovrebbe funzionare a tempo indeterminato. Sulla maggior parte delle piattaforme, quando non c'è più memoria disponibile, malloc() restituirà 0, quindi il ciclo continuerà a funzionare senza modificare la quantità di memoria allocata. Linux consente il sovraccarico della memoria in modo che le chiamate malloc() continuino ad aggiungersi alla memoria virtuale. Il processo potrebbe alla fine essere ucciso da OOM Killer quando i dati che malloc() utilizza per amministrare la memoria inizia a causare problemi (non sarà perché si tenta di utilizzare la memoria allocata stessa perché il codice non la usa), ma Linux non è previsto come piattaforma nella domanda.

+0

OOM killer entrerà in azione non appena viene effettivamente utilizzata la memoria. Finché conservo la memoria che ho assegnato non scritta, non dovrebbe accadere nulla. – glglgl

+0

Hm, ho sbagliato. Con una dimensione del malloc di 1 MiB, i dati di amministrazione diventano così grandi che alla fine riempiono la memoria su un sistema a 64 bit. Con una dimensione del malloc di 1 GiB, la dimensione della memoria virtuale viene succhiata a 107t (in base a 'top') e il programma viene eseguito indefinitamente. – glglgl

+0

@glglgl: sì - ma potresti raggiungere un punto in cui 'malloc()' deve scrivere in memoria per mantenere i suoi elenchi di ciò che ha assegnato, ea quel punto OOM Killer potrebbe passare all'azione. –

Problemi correlati