2011-06-24 9 views
6

I'm performance tuning della mia app per iPhone/iPad, sembra che non tutta la memoria venga liberata quale dovrebbe essere. Negli strumenti, dopo aver simulato un avviso di memoria nel mio simulatore, rimangono molte voci di "Malloc"; cosa c'è di loro? Posso sbarazzarmene, cosa significano/cosa rappresentano?iPhone/Strumenti: cosa sono le voci "malloc" nel riepilogo dell'oggetto?

Grazie mille,

Stefan

enter image description here

risposta

4

In qualsiasi momento, la vostra applicazione avrà un (enorme) il numero di oggetti che vivono, anche dopo aver ottenuto una memoria avviso (e la successiva memoria recupero dal sistema operativo). Quindi, è abbastanza comune che vedrai anche molti malloc che stai vedendo.

Non sono di per sé un segno che qualcosa non va con l'allocazione della memoria, ma forse solo il fatto che il programma è in esecuzione.

Dai anche un'occhiata a questo S.O. topic to learn more about the object allocation tool.

Inoltre, esistono molte tecniche avanzate che è possibile utilizzare per rilevare i problemi di allocazione della memoria. Here puoi trovare un ottimo tutorial che ti permetterà di andare ben oltre ciò che lo strumento Leaks ti permette.

EDIT:

Circa l'esatto significato di questi mallocs, si deve pensare che è possibile allocare due grandi classi di oggetti (per dirla grossolanamente): oggetti Objective-C che vengono creati attraverso l'Obj-C sistema runtime e oggetti "normali" C, allocati tramite malloc.

Molti oggetti della seconda classe vengono allocati (senza chiamare direttamente malloc) dalle librerie di sistema e dalla libreria C del compilatore (si pensi, ad esempio, socket o handle di file, qualunque sia). A quegli oggetti (C) non sono associate informazioni di tipo, quindi Instruments mostra semplicemente la dimensione del blocco di memoria assegnato, senza avere più informazioni disponibili.

Molte volte gli oggetti malloc vengono creati da classi di livello superiore, in modo che quando si recupera la memoria associata alle loro istanze, viene liberata anche la memoria allocata tramite malloc.

Non dovresti preoccuparti specificamente di loro, a meno che non vedi che la loro dimensione complessiva "cresce indefinitamente" durante l'esecuzione del programma. In tal caso, devi prima indagare sul modo in cui assegni/rilasci i tuoi oggetti di livello superiore e capisci dove nel tuo codice le cose si bloccano.

+0

Non ho colonne nette, solo quelle visibili nello screenshot ... e "byte viventi" dovrebbe essere la dimensione che conta, non è vero? Quindi la mia domanda principale è: devo preoccuparmi di quelle malloc-entry? Se sì, cosa rappresentano, quindi ho un punto di partenza ... grazie! – swalkner

+0

Per favore, vedi la mia modifica. Spero che lo chiarisca un po '. – sergio

+0

hm, ok, grazie mille ... Penso che, nel mio caso specifico, significa che devo preoccuparmi di loro. La dimensione del malloc è in aumento, quindi vedrò qual è la ragione di ciò. Molte grazie! – swalkner