Spring til indhold

Hukommelsesforbrug for en datastruktur

Hvor mange MB fylder en liste med X elementer af denne datatype i hukommelsen (uden sprog-overhead)?

Svar: Grundlæggende datatypers størrelse i hukommelsen er defineret af sprogets specifikation eller af standarder som IEEE 754 for flydende tal. Ved at gange antal elementer med bytes pr. element får man et overslag over den rå hukommelse, en simpel liste eller et array optager — nyttigt når man skal vurdere, om en datastruktur kan holdes i RAM, eller om den kræver strømmet/disk-baseret behandling.

Formel

samlet hukommelse (bytes) = antal elementer × bytes pr. element

Eksempel: 1.000 elementer × 8 byte (double) = 8.000 bytes = 0,008 MB

Symboler og enheder i formlen
SymbolBetydningEnhed
antal_elementerAntal elementerstk.
byte_pr_elementDatatype—
=Samlet hukommelsesforbrugMB
=Samlet hukommelsesforbrug (bytes)bytes

Gyldighed og kilde

Kilde
IEEE 754 (flydende decimal-standard) + almindelige programmeringssprogs heltalsstørrelser

Gælder ikke når

  • Reelt hukommelsesforbrug i høj-niveau-sprog (fx Python- eller Java-objekter) er ofte betydeligt højere pga. objekt-headers og garbage collector-overhead — beregningen viser kun den rå datastørrelse.

Regneeksempel

Beregnerens egne standardværdier sat ind. Tallene er regnet med præcis den formel værktøjet bruger.

Sat ind

  • Antal elementer1.000 stk.
  • Datatype8

Giver

  • Samlet hukommelsesforbrug0,008 MB
  • Samlet hukommelsesforbrug (bytes)8.000 bytes

Selve beregneren er låst

Opret en gratis bruger for at låse op for alle artikler, beregnere, skabeloner og sortiment — og få adgang til quizzer og klasser. Det tager under et minut: navn, email og en adgangskode. Intet betalingskort.

Vil du prøve noget først? Se hvad du kan bruge uden konto — junior-zonen, leksikonet, videoerne og mere.

Sådan bruger du den

Når et script eller en tjeneste skal holde store datamængder i RAM, fx loglinjer eller sensormålinger, skal du vide om det kan være der. Beregneren regner den rå hukommelse ud fra antal elementer og datatype.

Trin for trin

  1. Tæl elementerne: rækker, målinger eller tegn.
  2. Find datatypens størrelse: 1, 2, 4 eller 8 byte.
  3. Gang de to tal. Det er den rå hukommelse i byte.
  4. Læg sprogets overhead til. I Python eller Java kan objekter fylde mange gange mere.

Typiske fejl

  • At regne Python-lister som rå data. Et Python-tal er et objekt på ca. 28 byte plus en reference på 8.
  • At forveksle MB (1.000.000 byte) og MiB (1.048.576 byte).
  • At glemme at strenge i UTF-8 fylder 1-4 byte pr. tegn, ikke altid 1.

Eksempler fra hverdagen

Måledata som double

Et overvågningsscript gemmer 1 million temperaturmålinger fra et serverrum som 64-bit tal.

Antal elementer
1.000.000 stk.
Datatype
64-bit heltal / double (8 byte, IEEE 754 double precision)

Det betyder: De rå data fylder 8 MB (8.000.000 bytes). Det er småt i RAM.

Sensorlog med 32-bit heltal

En IoT-gateway samler 10 millioner målinger som 32-bit heltal, før de sendes videre.

Antal elementer
10.000.000 stk.
Datatype
32-bit heltal / float (4 byte, IEEE 754 single precision)

Det betyder: Det fylder 40 MB. Gatewayen har 512 MB, så det kan være der, men ikke mange gange.

Flag for 100 millioner poster

Et oprydningsjob skal markere 100 millioner poster som behandlet eller ej.

Antal elementer
100.000.000 stk.
Datatype
byte / bool (1 byte)

Det betyder: Som byte fylder det 100 MB. Som bit-array ville det kun være en ottendedel.

Tommelfingerregel

1 million double = 8 MB. 1 million int32 = 4 MB.

Sådan tjekker du svaret

Mål med sys.getsizeof i Python, sizeof i C eller hukommelsesprofileren i dit miljø.