Hvor mange minneadresser kan RAM-en på datamaskinen inneholde?

Jun 18, 2025
Maskinvare

Noen ganger er det gøy å se på overflatenivået til dataopplevelsen, og andre dager er det morsomt å dykke rett inn i det indre arbeidet. I dag ser vi på strukturen til dataminnet og hvor mye ting du kan pakke i en pinne med RAM.

Dagens spørsmål og svar-økt kommer til oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en samfunnsdrevet gruppe av spørsmål og svar-nettsteder.

Spørsmålet

SuperUser-leser Johan Smohan sliter med hvordan prosessortype og minnestørrelse fungerer sammen for å gi et totalt antall adresser. Han skriver:

Hvor mange minneadresser kan vi få med en 32-biters prosessor og 1 GB RAM og hvor mange med en 64-biters prosessor?

Jeg tror det er noe sånt som dette:

1 GB ram delt på enten 32 bits 4 bits (?) For å få antall minneadresser?

Jeg leste på Wikipedia at 1 minneadresser er 32 bits brede eller 4 oktetter (1 oktett = 8 bits), sammenlignet med en 64-biters prosessor der 1 minnesadresser eller 1 heltall er 64 bits bred eller 8 oktetter. Men vet ikke om jeg forsto det riktig heller.

Dette er slags spørsmål som kan holde en nysgjerrig nerd oppe om natten. Hvor mange adresser er tilgjengelige under hvert av Johans hypotetiske systemer?

Svaret

SuperUser-bidragsyter Gronostaj gir litt innsikt i hvordan RAM deles og brukes:

Kort svar: Antall tilgjengelige adresser er lik den minste av dem:

  • Minnestørrelse i byte
  • Største usignerte heltall som kan lagres i CPUs maskinord

Langt svar og forklaring på ovenstående:

Minne består av byte (B). Hver byte består av 8 biter (b).

1 B = 8 b

1 GB RAM er faktisk 1 GiB (gibibyte, ikke gigabyte). Forskjellen er:

1 GB = 10 ^ 9 B = 1 000 000 000 B
1 GiB = 2 ^ 30 B = 1037741824 B

Hver minnebyte har sin egen adresse, uansett hvor stort CPU-maskinordet er. F.eks. Intel 8086 CPU var 16-bit, og den adresserte minne byte, det gjør også moderne 32-biters og 64-biters CPUer. Det er årsaken til den første grensen - du kan ikke ha flere adresser enn minnebytes.

Minneadresse er bare et antall byte CPUen må hoppe fra fra begynnelsen av minnet for å komme til den den leter etter.

  • For å få tilgang til den første byten, må den hoppe over 0 byte, så den første bytes adresse er 0.
  • For å få tilgang til den andre byten må den hoppe over 1 byte, så adressen er 1.
  • (og så videre…)
  • For å få tilgang til den siste byten hopper CPU over 1073741823 byte, så adressen er 1073741823.

Nå må du vite hva 32-bit faktisk betyr. Som jeg nevnte tidligere, er det størrelsen på et maskinord.

Maskinord er mengden minne CPU bruker til å holde tall (i RAM, cache eller interne registre). 32-biters CPU bruker 32 bits (4 byte) til å holde tall. Minneadresser er også tall, så på en 32-biters CPU består minneadressen av 32 bits.

Tenk nå på dette: Hvis du har en bit, kan du lagre to verdier på den: 0 eller 1. Legg til en bit til, og du har fire verdier: 0, 1, 2, 3. På tre bits kan du lagre åtte verdier : 0, 1, 2… 6, 7. Dette er faktisk et binært system og det fungerer slik:

Binær desimal
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111

Det fungerer akkurat som vanlig tillegg, men maksimalt siffer er 1, ikke 9. Desimal 0 er 0000 , så legger du til 1 og får 0001 , legg til en igjen, og du har 0010 . Det som skjedde her er som å ha desimal 09 og legge til en: du endrer 9 til 0 og øker neste siffer.

Fra eksemplet ovenfor kan du se at det alltid er en maksimumsverdi du kan beholde i et tall med konstant antall biter - for når alle biter er 1 og du prøver å øke verdien med 1, blir alle biter 0, og bryter dermed Nummer. Det kalles heltalloverløp og forårsaker mange ubehagelige problemer, både for brukere og utviklere.

11111111 = 255
+ 1
-----------
  100000000 = 0 (9 bits her, så 1 er trimmet)
  • For 1 bit er den største verdien 1,
  • 2 biter - 3,
  • 3 biter - 7,
  • 4 biter - 15

Det største mulige tallet er alltid 2 ^ N-1, hvor N er antall bits. Som jeg sa tidligere, er en minneadresse et tall, og det har også en maksimal verdi. Derfor er maskinordstørrelsen også en grense for antall tilgjengelige minneadresser - noen ganger kan ikke CPU-en din bare behandle tall som er store nok til å adressere mer minne.

Så på 32 biter kan du holde tall fra 0 til 2 ^ 32-1, og det er 4 294 967 295. Det er mer enn den største adressen i 1 GB RAM, så i ditt spesielle tilfelle vil RAM være den begrensende faktoren.

RAM-grensen for 32-biters CPU er teoretisk 4 GB (2 ^ 32) og for 64-biters CPU er det 16 EB (exabyte, 1 EB = 2 ^ 30 GB). Med andre ord kan 64-biters CPU adressere hele Internett ... 200 ganger;) (estimert av WolframAlpha ).

Imidlertid kan 32-biters CPUer i virkelige operativsystemer adressere omtrent 3 GiB RAM. Det er på grunn av operativsystemets interne arkitektur - noen adresser er reservert for andre formål. Du kan lese mer om denne såkalte 3 GB barrier on Wikipedia . Du kan heve denne grensen med Utvidelse av fysisk adresse .

Når jeg snakker om minneadressering, er det få ting jeg bør nevne: virtuell hukommelse , segmentering og personsøk .

Virtuell hukommelse

Som @Daniel R Hicks påpekte i et annet svar, bruker operativsystemer virtuelt minne. Hva det betyr er at applikasjoner faktisk ikke fungerer på ekte minneadresser, men de som leveres av OS.

Denne teknikken lar operativsystemet flytte data fra RAM til en såkalt Pagefile (Windows) eller Swap (* NIX). HDD er få størrelser langsommere enn RAM, men det er ikke et alvorlig problem for data som sjelden er tilgjengelig, og det gir OS mulighet til å gi applikasjoner mer RAM enn du faktisk har installert.

Personsøk

Det vi snakket om så langt kalles flat adresseringsordning.

Personsøk er et alternativt adresseringsskjema som gjør det mulig å adressere mer minne som du normalt kan med ett maskinord i flat modell.

Se for deg en bok fylt med ord på 4 bokstaver. La oss si det er 1024 tall på hver side. For å adressere et nummer, må du vite to ting:

  • Antall sider som ordet skrives ut på.
  • Hvilket ord på den siden er det du leter etter.

Nå er det akkurat slik moderne x86-prosessorer håndterer minne. Den er delt inn i 4 KiB-sider (1024 maskinord hver), og disse sidene har tall. (faktisk kan sidene også være 4 MiB store eller 2 MiB med PAE ). Når du vil adressere minnecelle, trenger du sidenummer og adresse på den siden. Merk at hver minnecelle er referert av nøyaktig ett tallpar, som ikke vil være tilfelle for segmentering.

Segmentering

Vel, denne er ganske lik personsøker. Den ble brukt i Intel 8086, bare for å nevne et eksempel. Grupper av adresser kalles nå minnesegmenter, ikke sider. Forskjellen er at segmenter kan overlappe hverandre, og de overlapper mye. For eksempel på 8086 var de fleste minnecellene tilgjengelige fra 4096 forskjellige segmenter.

Et eksempel:

La oss si at vi har 8 byte minne, alle holder nuller bortsett fra 4. byte som er lik 255.

Illustrasjon for flat minnemodell:

_____
|  0  |
|  0  |
|  0  |
| 255 |
|  0  |
|  0  |
|  0  |
|  0  |
 -----

Illustrasjon for sideminne med 4-byte sider:

SIDE0
 _____
| 0 |
| 0 |
| 0 | SIDE 1
| 255 | _____
 ----- | 0 |
        | 0 |
        | 0 |
        | 0 |
         -----

Illustrasjon for segmentert minne med 4-bytesegmenter forskjøvet med 1:

SEG 0
 _____   SEG 1
|  0  |  _____   SEG 2
|  0  | |  0  |  _____   SEG 3
|  0  | |  0  | |  0  |  _____   SEG 4
| 255 | | 255 | | 255 | | 255 |  _____   SEG 5
 -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 6
         -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 7
                 -----  |  0  | |  0  | |  0  | |  0  |  _____
                         -----  |  0  | |  0  | |  0  | |  0  |
                                 -----   -----   -----   -----

Som du kan se, kan fjerde byte adresseres på fire måter: (adressering fra 0)

  • Segment 0, forskyvning 3
  • Segment 1, forskyvning 2
  • Segment 2, forskyvning 1
  • Segment 3, forskyvning 0

Det er alltid den samme minnecellen.

I virkelige implementeringer er segmentene forskjøvet med mer enn 1 byte (for 8086 var det 16 byte).

Det som er ille ved segmentering er at det er komplisert (men jeg tror du allerede vet det;) Det som er bra, er at du kan bruke noen smarte teknikker for å lage modulære programmer.

For eksempel kan du laste inn en modul i et segment, og late som om segmentet er mindre enn det egentlig er (akkurat lite nok til å holde modulen), og deretter velge det første segmentet som ikke overlapper den pseudo-mindre og laste neste modul, og så videre. I utgangspunktet er det du får på denne måten sider med variabel størrelse.


Har du noe å legge til forklaringen? Hør av i kommentarene. Vil du lese flere svar fra andre teknologikyndige Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her .

.post-innhold .inngangs-bunntekst

How Many Memory Addresses Can We Get With A 32-bit Processor And 1gb Ram? (5 Solutions!!)

Memory Addresses, Computer Science Lecture | Sabaq.pk |

Q. 7.8: (a) How Many 32K * 8 RAM Chips Are Needed To Provide A Memory Capacity Of 256Kbytes? (b) How

How Computer Memory Works - Kanawat Senanan

Assembly Program - Obtaining Memory Addresses

What Is Virtual Memory? – Gary Explains

The Fetch-Execute Cycle: What's Your Computer Actually Doing?

256KB Memory Design Using 64KB Ram Blocks-Microprocessors Example

How Much RAM Do You ACTUALLY Need? (2020)

Registers And RAM: Crash Course Computer Science #6

Lesson 9.3 : Pointers Containing Memory Addresses Of Multi Byte Variables


Maskinvare - Mest populære artikler

Hva er hurtiglading, og hvordan fungerer det?

Maskinvare May 25, 2025

OnePlus De fleste store telefonutgivelser i dag kommer med forbedrede ladehastigheter. Hvordan fungerer hurtigladere, og hvordan blir de enda raskere? Finn ut..


Hvordan brenne en hvilken som helst videofil til en Blu-Ray-plate som kan spilles

Maskinvare Jul 12, 2025

Hvis du har gjort det rev din Blu-Ray-samling For å gjøre biblioteket ditt mer praktisk, kan det også være lurt å brenne en sikkerhetskopi eller bruke en kopi sl..


Hvordan få Google Home til å uttale navnet ditt riktig

Maskinvare Jun 20, 2025

UCACHED INNHOLD Stemmen på Google Assistant har blitt bedre med årene, men den snubler fortsatt noen ganger når det gjelder navn. Hvis Google ofte uttaler navnet ditt feil, kan..


Slik streamer du spill med NVIDIA GameStream til hvilken som helst datamaskin, nettbrett eller smarttelefon

Maskinvare Jul 5, 2025

NVIDIAs GameStream-teknologi lar deg streame spill fra en GeForce-drevet Windows-PC til en annen enhet. Den støtter bare offisielt NVIDIAs egne Android-baserte SHIELD-enheter, men ..


Du kan få en $ 200 Windows-bærbar PC, men Chromebook er fortsatt verdt å kjøpe

Maskinvare Dec 17, 2024

UCACHED INNHOLD Eraen av $ 200 Windows bærbar PC er tilbake, og HP Stream er bare den første av mange. Disse produktene er definitivt bedre enn den mye skadede ne..


Er det trygt å pendle med en bærbar PC som er oppe og går?

Maskinvare Feb 3, 2025

UCACHED INNHOLD For mange av oss kan livene våre være ganske hektiske og travle til tider, så fristelsen til å få gjort så mye som mulig mens du er på farten, har mye appel..


5 måter å få Windows 7 på din nye PC

Maskinvare Jan 7, 2025

UCACHED INNHOLD Ja, Windows 7 er fortsatt tilgjengelig. Hvis du vil ha en ny PC, og du også vil ha Windows 7, kan du sannsynligvis få den. Dette er enklest for bedrifter, men se..


Hvordan oppgradere Netbook til Windows 7 Home Premium

Maskinvare Jun 21, 2025

UCACHED INNHOLD Vil du ha flere funksjoner og blinke i Windows på netbooken din? Slik kan du enkelt oppgradere netbook til Windows 7 Home Premium på den enkle måten. De fleste n..


Kategorier