2012-09-03 40 views
7

Eventuali duplicati:
Memory footprint of Haskell data typesUtilizzo della memoria dei costruttori in Haskell

Quando la soluzione di problemi combinatori, che spesso rappresentano la soluzione come una stringa di bit, ad esempio. 1010100010110111000110 ... ottieni l'immagine.

ho pensato che quando uso [Int] per la stringa di bit, Int spende sempre la stessa quantità di memoria, non importa quanto grande il numero è in realtà (perché Int è delimitata, in contrasto con Integer), come il computer ricorda solo la rappresentazione del bit e lo String richiederebbero ancora più spazio per quanto ne so.

la mia idea era quindi di utilizzare il tipo di dati

data Bits = Empty | Zero Bits | One Bits deriving (Eq,Ord,Show) 

Ma la quantità di memoria fanno i costruttori Empty, Zero e One usare rispetto ad Int 's?

+2

Un 'Int' è sempre o 32 o 64 bit, quindi non può memorizzare numeri arbitrariamente grandi. "Intero", d'altra parte, è illimitato. – huon

+5

Non pertinente alla tua domanda, ma ci sono i DataBits che hanno bitfield roba – Squidly

+0

@dbaupp: lo so, è per questo che lo volevo comparato solo a "Int'" – Undreren

risposta

10

Int costa due parole di memoria (#I costruttore e #Int campo), i dati Bits possibile utilizzare varie costo, ad esempio: Zero (One (Zero Empty)) costerà:

  1. Una parola per Empty costruttore
  2. Due parole per Zero Costruttore e sul campo
  3. Due parole per One costruttore e campo
  4. due parole per Zero Costruttore e campo

e costo totale - 7 parole. Quindi la quantità di memoria per i dati può essere superiore a Int.

+0

Non sono sicuro di cosa intendi per "parole"? Che cos'è una "parola" e come faccio a calcolare l'utilizzo della memoria? – Undreren

+4

È una parola macchina, è un 4 byte in macchine a 32 bit e 8 byte in 64 bit. –

+0

Penso di aver ottenuto la risposta alle mie domande qui, poiché qualcuno è stato così gentile da contrassegnare la mia domanda come un duplicato. – Undreren

Problemi correlati