15 anni fa, mentre programmavo con Pascal, ho capito perché usare la potenza di due per l'allocazione di memoria. Ma questo sembra ancora lo stato dell'arte.Perché tutti usano numeri 2^n per l'allocazione? -> new StringBuilder (256)
C# Esempi:
new StringBuilder(256);
new byte[1024];
int bufferSize = 1 << 12;
ho ancora vedere questo migliaia di volte, io uso questo me stesso e sto ancora in discussione:
abbiamo bisogno di questo nei moderni linguaggi di programmazione e hardware moderno?
Immagino che sia una buona pratica, ma qual è la ragione?
EDIT
Ad esempio una matrice byte[]
, come affermato da risposte qui, una potenza di 2 avrà alcun senso: (?) L'array utilizzerà 16 byte, quindi ha senso usare 240 (= 256-16) per le dimensioni per un totale di 256 byte?
Poiché la CPU funziona in modo binario, i blocchi di memoria (pagine) sono di dimensione 2^n (perché non utilizzare mezze memblocks) e sono facili da indicizzare. Vedi di più qui: http://en.wikipedia.org/wiki/Computer_number_format e qui: https://en.wikipedia.org/wiki/Page_(computer_memory) –
Penso che la maggior parte è mettersi in mostra ... Si puo ' so in realtà quale esatta dimensione del buffer è allocata per classi complesse ('Dictionary' o anche' List 'o' StringBuilder'), per array di byte ha un senso in qualche modo come ha spiegato Jack. –