Questo perché .NET è stato progettato per funzionare su processori moderni. Che sono molto, molto più veloci del bus di memoria. Il processore funziona a circa 2 gigahertz. La RAM della tua macchina ha un clock tipicamente di un paio di centinaia di megahertz. La lettura di un byte dalla RAM richiede oltre cento cicli di clock.
Il che rende le cache della CPU molto importanti per i processori moderni, una grande quantità di chip in loco viene masterizzata per rendere le cache più grandi possibile. Tipico oggi è 64 KB per la cache L1, la memoria più veloce e fisicamente situata molto vicino al core del processore, 256 KB per la cache L2, più lento e più lontano dal core, circa 8 MB per la cache L3, più lento e più lontano via, condiviso da tutti i core del chip.
Per rendere effettive le cache, è molto importante accedere alla memoria in modo sequenziale. La lettura del primo byte può essere molto costosa se è necessario un accesso alla memoria L3 o RAM, i successivi 63 byte sono molto economici. La dimensione della "linea della cache", l'unità di trasferimento dei dati per il bus di memoria.
Questo rende una matrice di gran lunga la più efficace struttura di dati, i suoi elementi sono memorizzati in modo sequenziale in memoria. E una lista collegata di gran lunga la peggiore struttura dati possibile, i suoi elementi sono naturalmente dispersi nella memoria, potenzialmente incorrendo nella carenza di cache molto costosa per ogni elemento.
Di conseguenza, tutte le raccolte .NET, ad eccezione di LinkedList <, vengono implementate come array internamente. Si noti che uno Stack <> è già naturalmente implementato come array poiché è possibile solo premere e inserire un elemento dalla fine dell'array. Un'operazione O (1). Il ridimensionamento dell'array viene ammortizzato O (logN).
fonte
2014-02-22 10:29:55
Un altro punto è che l'array sottostante viene utilizzato in modo circolare, quindi gli elementi dell'array vengono riciclati mentre la testa e la coda si spostano (se i limiti non vengono superati). –
3 parole: overhead di gestione della memoria. – Mehrdad
@SebastianNegraszus ringraziamenti. Come l'hai trovato? Ho cercato molto e non ho trovato nulla. – KooKoo