Avatar billede debug1305 Nybegynder
04. november 2002 - 15:03 Der er 23 kommentarer

Total fysisk RAM i windows

Hvordan finder man ud af hvor meget fysisk RAM der er i en maskine i windows? Følgende kode returnerer total fysisk ram i antal bytes, men dette antal er ikke lige præcis 256, som det vel burde være. Hvorfor ikke?

MEMORYSTATUS m;
m.dwLength = sizeof(m);
GlobalMemoryStatus(&m);
cout << m.dwTotalPhys << endl;
Avatar billede di8leva Nybegynder
04. november 2002 - 15:09 #1
er det fordi en byte er 1024 kilobytes og 1 kb = 1024 Megabyte..

blir det korrekt då?
Avatar billede jpk Nybegynder
04. november 2002 - 15:10 #2
Øh, hvorfor burde det være lige præcis 256..?
Avatar billede di8leva Nybegynder
04. november 2002 - 15:10 #3
256 MB er då 268435456 byte

eller er ditt værdi totalt forkert?
Avatar billede debug1305 Nybegynder
04. november 2002 - 15:14 #4
>>di8leva
Nej, jeg regner med 1 kb = 1024 b
Jeg får 266350592 bytes.
Det er lig med 254.01 mb

>>jpk
Fordi jeg har 256 MB i maskinen!
Avatar billede jpk Nybegynder
04. november 2002 - 15:21 #5
Skriver du ikke noget om, desuden skal tallet dwTotalPhys jo netop ikke være 256 når du har 256MB RAM...
Avatar billede debug1305 Nybegynder
04. november 2002 - 15:25 #6
Det kan du vel regne ud (eller ikke!). Jeg regner da ikke med at få 256 mb hvis jeg kun har 128 mb!!!
Avatar billede borrisholt Novice
04. november 2002 - 15:33 #7
hvad er problemet ?

1024*1024*256-268435456 = 0 !

Jens B
Avatar billede soreno Praktikant
04. november 2002 - 15:38 #8
det er jo ikke Windows' skyld at producenterne snyder dig for 2 MB..
Avatar billede soreno Praktikant
04. november 2002 - 15:38 #9
.. RAM producenterne..
Avatar billede di8leva Nybegynder
04. november 2002 - 15:42 #10
hehe soreno...
Avatar billede debug1305 Nybegynder
04. november 2002 - 16:00 #11
Ja, du har sikkert ret. Producenten har snydt mig for 2036 KB. Producenten skærer simpelthen 2036 KB af RAM-klodserne og laver et helt modul hver gang de har samlet 256 MB...
Avatar billede debug1305 Nybegynder
04. november 2002 - 16:02 #12
>>borrisholt
Ja, men 26835456 != 266350592
Avatar billede soreno Praktikant
04. november 2002 - 16:08 #13
hvis jeg forstår dig korrekt, så prøver du at være ironisk ?

når du køber ram (og harddiske osv.) så køber du enheder der er opdelt i bytes. din "ram-klodse" indeholder 266350592 bytes - ikke 256MB.
Avatar billede debug1305 Nybegynder
04. november 2002 - 16:18 #14
Du er skarp... Prøver? Lykkedes det da ikke?
Jeg forestiller mig at der har noget at gøre med at de indsatte ramklodser, bliver adresseret fra adresse 0x00000000. Grunden til at der er noget, som forsvinder er derfor at der i starten af hukommelsen er noget reserveret hukommelse. F.eks. VGA-bios o.lign. Der er vel også noget konventionel hukommelse på board'et i forvejen, men det bliver vist ikke lagt til de ramklodser man selv sætter i.
Men der er kun et skud.
Avatar billede mosquito Nybegynder
04. november 2002 - 16:20 #15
hvis du har shared memory med dit grafik kort har du en forklaring på dine manglende 2mb ram... :-)
Avatar billede debug1305 Nybegynder
04. november 2002 - 16:23 #16
Det har jeg ikke, men det forklarer heller ikke hvorfor det ikke er præcis 2 MB, men helt præcis 2036 KB.
Avatar billede soreno Praktikant
04. november 2002 - 17:05 #17
jeg vil give dig ret - det er egentlig lidt mystisk:
når jeg kører programstumpen får jeg:
267943936 bytes

altså mangler der
268435456 - 267943936 = 491.520 bytes
altså 480KB
Avatar billede debug1305 Nybegynder
04. november 2002 - 17:19 #18
Ja, jeg får også forskellige differencer på forskellige maskiner. Og hvis der bare var en nogenlunde fast diff, f.eks. under 1 MB, kunne jeg bare runde op, men det varierer meget. Min midlertidige løsning går ud på at runde op til nærmeste 4 MB, og det virker fint, jeg savner bare en forklaring på hvorfor der "mangler" nogle bytes.
Avatar billede soreno Praktikant
04. november 2002 - 17:29 #19
det er nok "en designbeslutning" microsoft har lavet.
Avatar billede bromer Nybegynder
05. november 2002 - 19:42 #20
Jeg mener ogsaa at det sker under Linux og andre... udfra at jeg paa min FreeBSD boks mangler ca. .8MB vil jeg tro at det er stoerrelsen af min kernel :)
Avatar billede soepro Nybegynder
08. november 2002 - 14:32 #21
Det er nok snarere fordi hardwaren og BIOS napper noget af den (fysiske) hukommelse på 256 MB, bl.a. til at gemme BIOS, Video ROM mirroring m.v. Typisk kan du stille på hvilke ting der replikeres til RAM inden i BIOS'en.

Derudover vil jeg tror at Windows reservere noget hukommelse til sine egne ting og sager, ligesom DOS gjorde det - denne del af hukommelsen er derfor ikke tilgængelig for dit program. Endelig så kan din BIOS i fbm. memory checket når du tænder for din maskine, fejlmarkere dele af din RAM, hvis paritetscheckene ikke er OK. (Ligesom der kan være bad sectors/cluster på din HDD, som du heller ikke der har de 40GB du har betalt for, men "kun" 39,????GB.)
Avatar billede technotrold Nybegynder
08. november 2002 - 14:41 #22
Jeg købte osse en 80 gigabytes harddisk for lidt siden, men der er kun 74.5 på.. sådan er det bare..
Avatar billede soreno Praktikant
08. november 2002 - 14:42 #23
så virker det bare misvisende at der i dokumentationen skrives:
dwTotalPhys
  Indicates the total number of bytes of physical memory.

jeg læser det som "det totale antal bytes som den fysiske hukommelse har". Den fysiske hukommelse må da være "ram-klodserne"..!?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester