In MATLAB, come possono "preallocare" gli array di celle per migliorare le prestazioni?

5

Leggevo questo articolo su MathWorks sul miglioramento delle prestazioni di MATLAB e noterai che uno dei primi suggerimenti è preallocare gli array, il che ha senso. Ma dice anche che preallocare gli array di celle (che sono matrici che possono contenere tipi di dati diversi e sconosciuti) miglioreranno le prestazioni.

Ma in che modo migliorare le prestazioni perché i tipi di dati sono sconosciuti, quindi non sa quanta memoria contigua richieda anche se conosce la forma dell'array di celle e quindi non può sicuramente preallocare la memoria? Quindi, come si ottiene un miglioramento delle prestazioni?

Mi scuso se questa domanda è più adatta per StackOverflow rispetto ai programmatori ma non si tratta di un problema specifico, quindi ho pensato che si adattasse meglio qui, per favore fatemi sapere se mi sbaglio.

Qualsiasi spiegazione sarebbe molto apprezzata:)

    
posta Alex McMurray 10.07.2012 - 11:59
fonte

1 risposta

4

Non conosco i dettagli sulla gestione della memoria di MATLAB, quindi questa è solo un'intuizione guess : gli array di celle sono implementati in modo che la matrice stessa contenga solo riferimenti (puntatori) alle celle, che in realtà vivi nel heap . Sicuramente non è possibile allocare anticipatamente la memoria per le celle effettive perché, come hai scritto, la loro dimensione è sconosciuta. Tuttavia, può pre-allocare l'array di puntatori stesso, poiché la dimensione dei puntatori è nota.

Quando ci pensi, sarebbe piuttosto difficile implementare un array la cui dimensione dell'elemento non sarebbe costante: come faresti a sapere dove si trova la memoria X [1234], se la dimensione di ogni elemento può essere diversa ? Pertanto uno strato di riferimento indiretto (puntatori di dimensioni costanti di memoria che puntano ai dati effettivi) è piuttosto utile. Un'alternativa sarebbe una sorta di elenco collegato, un diverso tipo di compromesso.

    
risposta data 10.07.2012 - 12:37
fonte

Leggi altre domande sui tag