Pages

1/13/2011

32bit or 64 bit OS for 4GB RAM

เมื่อกีีกำลังนึกๆ อะไรขึ้นมาเรื่องนึง

คือเครื่องที่ใช้อยู่เนี่ย มันมี RAM 4GB,  เราก็เลยใช้ OSแบบ64bit เพราะว่าบางคนบอกว่ามันทำให้เราสามารถใช้ได้ครบ4GB จริงๆ   ไม่เช่นนั้น ถ้าใช้ OS แบบ 32bitแล้ว ก็จะได้แค่ราวๆ 3.2 - 3.5 GB  เท่ากับซื้อ 4GBมาไม่คุ้ม

แต่พอมาลองนึกดูจริงๆ  ถ้าใช้ OS แบบ 64 bit ก็แปลว่าการเรียกถึงaddressต่างๆ ตัวแปรpointerต่างๆ ก็กลายเป็น 64bit หมดน่ะสิ   ซึ่งก็ทำให้จากเดิมที่บน 32bitมีpointerขนาดแค่ 4 bytes  บน64bit ก็จะมีpointerขนาด 8 bytes  เพิ่มขึ้นมาตั้งเท่าตัว?  อย่างงี้มันจะคุ้มมั๊ยที่ ใช้แบบ 64bit แล้วได้RAMเพิ่มขึ้นมาราวๆ 500MB เนี่ย??

เลยมาลองคิดเล่นๆ ว่า :

ถ้าเกิดว่า เราใช้ windows 32bit ที่จะทำให้ได้ memory มากสุดแค่ 3.5 GB  (เอาเป็น 4GB - 512MB ดีกว่า)
4GB - 512MB = 4096 - 512 MB = 3584 MB = 3,758,096,384 bytes
ซึ่งถ้าคิดว่า แต่ละคำสั่ง หรือแต่ละ pointer จะต้องใช้เนื้อที่ในการเก็บ=32bits = 4bytes
ก็จะสามารถเก็บpointerได้ทั้งหมด
3,758,096,384 / 4 = 939,524,096 ตัว

ในขณะที่ ถ้าเราใช้ addressing แบบ 64bit  แล้วก็จะใช้ memory ได้เต็มๆ 4GB ก็จะเท่ากับ
4GB = 4,294,967,296 bytes
แต่คราวนี้ pointerเราแต่ละตัวดันใช้เนื้อที่เพิ่มขึ้น เป็น 64bit = 8bytes
ดังนั้นก็จะเหลือเนื้อที่แค่
4,294,967,296 / 8 = 536,870,912 ตัว

ง่ะ น้อยกว่ากันเกือบครึ่ง

อาจจะต้องมีข้อแย้งว่า..

1. windows 32 bit จริงๆแล้ว ใช้ได้ไม่ถึง 3.5GB หรอก 
เพราะว่า 4Gนี่คือสูงสุดที่memory addressing จะไปได้  แต่พอมีการ์ดจอที่มี memory ซัก 512MB ตรงนี้ก็ต้องโดนตัดไปใช้ แล้วยังมี address ที่ต้องเอาไว้ต่อกับอุปกรณ์ต่างๆอีกต่างหาก   ซึ่งถ้านับกันเฉลี่ยๆ  ต่อให้เอาเหลือซัก 3GB   แต่ถึงอย่างงั้นก็ยังไม่ทำให้ผลลัพธ์เปลี่ยนแฮะ
เพราะ 3GB --> 3,221,225,472 bytes ---> 805,306,368 pointers

2. เราไม่ได้ใช้ทุกจุดใน memory เก็บค่าเฉพาะตัวแปรแบบ pointer ซักหน่อย   ดังนั้นนับเฉพาะ pointer ก็อาจจะไม่ถูกซะทีเดียว
อันนี้ก็ใช่ส่วนนึงเพราะว่าตัวแปรทั้งหมดในระบบ64bitไม่จำเป็นต้องขนาด64bitตลอด(พวกbyte,พวกchar ก็ยังคงต้องมีขนาดแค่1byteอยู่)  แต่หลายๆตัวก็จะถูกเปลี่ยนให้เป็น64bit ด้วยเหมือนกัน เช่น CPU registers, Stack, และคำสั่งต่างๆ ก็จะถูกเก็บและประมวลผลในแบบ64bit  ยกเว้นแต่พวกข้อมูลที่เป็นbinary stream เช่นข้อมูลที่เก็บเป็นก้อนๆ เช่นไฟล์ หรือว่าnetwork data ก็ยังคงเป็นทีละbyteเหมือนเดิมไม่เกี่ยวกัน   ดังนั้นจะบอกว่านับแบบว่าจำนวนpointerทั้งmemoryเลยก็คงจะไม่ถูกซะทีเดียว..   แต่ถึงอย่างนั้นก็ตาม  ถ้าให้แต่ละโปรแกรมเขียนเหมือนกัน อัตราส่วน pointer : data เท่ากัน    ผลลัพธ์ก็ยังไม่เปลี่ยนอยู่ดี

สงสัยว่าต้องย้ายไปใช้ OS แบบ 32bit ซะล่ะมัีงเนี่ย

ปล. รับความคิดเห็นเพิ่มเติมนะครับ  ผมอาจจะผิดก็commentมาได้

update:
เจอบทความดีๆ http://arstechnica.com/cpu/03q1/x86-64/x86-64-1.html
ซึ่งบอกทำนองว่า 64bit ก็ไม่ได้เพิ่มความสามารถทางด้านความเร็วเท่าไหร่ (นอกจากเพิ่มจำนวนregisterขึ้นมา) ถ้าเราไม่ได้ใช้การประมวลผลที่ต้องใช้integerแบบ64bit ก็ไม่ค่อยรู้สึกเท่าไหร่
64bitใช้สำหรับคนมีRAMเยอะๆ หรือคนประมวลผลตัวเลขเยอะๆมากกว่า

No comments:

Post a Comment