หน่วยความจำ 32 บิตสามารถเข้าถึงบนระบบปฏิบัติการ 64 บิตได้เท่าใด


86

ใน Windows ภายใต้สถานการณ์ปกติกระบวนการ 32 บิตสามารถเข้าถึง RAM ได้เพียง 2GB (หรือ 3GB พร้อมสวิตช์พิเศษในไฟล์ boot.ini) เมื่อรันกระบวนการ 32 บิตบนระบบปฏิบัติการ 64 บิตจะมีหน่วยความจำเท่าใด มีสวิตช์หรือการตั้งค่าพิเศษใดบ้างที่สามารถเปลี่ยนแปลงสิ่งนี้ได้


คำตอบ:


92

2 GB โดยค่าเริ่มต้น หากแอปพลิเคชันมีพื้นที่แอดเดรสขนาดใหญ่ (เชื่อมโยงกับ / LARGEADDRESSAWARE) จะได้รับ 4 GB (ไม่ใช่ 3 GB โปรดดูhttp://msdn.microsoft.com/en-us/library/aa366778.aspx )

พวกเขายังคง จำกัด ไว้ที่ 2 GB เนื่องจากแอปพลิเคชันจำนวนมากขึ้นอยู่กับบิตด้านบนของตัวชี้เป็นศูนย์


5
มีใครอธิบายได้ไหมว่าทำไมโปรเซสไม่สามารถเข้าถึง 4GB เต็มได้?
BlueTrin

1
คุณหมายถึงอะไร? หากคุณสร้างด้วยตัวเองคุณสามารถใช้แฟล็ก / LARGEADDRESSAWARE และทำให้ใช้งานได้กับ 4GB หากคุณไม่ทำเช่นนั้นคุณก็อยู่ในความเมตตาของนักพัฒนาที่ทำ
SilverbackNet

เป็นเพราะตัวชี้อาจถูกตีความด้วยส่วนเติมเต็มของทั้งสองอย่างเป็นอันตรายหรือไม่?
rosstex

1
ด้วยสิ่งนี้ - since many application depends on the top bit of pointers to be zeroคุณหมายความว่ารูปแบบการกำหนดแอดเดรสบิตที่ 32 ไม่ได้รับการพิจารณาหรือใช้ในขณะที่ข้ามผ่านพื้นที่แอดเดรสของกระบวนการใช่หรือไม่
RBT

21

-1: ระบบจะใช้ที่อยู่ 64 บิตสำหรับตัวมันเองดังนั้นจึงไม่จำเป็นต้องลบอะไรบางอย่าง
Thomas Weller

@ThomasW นั่นไม่เป็นความจริงอย่างน้อยก็ใน Windows WOW64 ยังคงต้องใช้ thunks 32 บิตสำหรับการโทรระบบ 64 บิต ดูmsdn.microsoft.com/en-us/library/windows/desktop/…
MSN

1
คุณหมายถึง DLL ที่ 605 kB เหรอ? ขออภัยฉันไม่เข้าใจเนื่องจากคำถามเกี่ยวกับหน่วยความจำ GB มากกว่า
Thomas Weller

7
@ThomasW. นั่นคือเหตุผลที่ฉันพูดว่า "ลบสิ่งที่ระบบใช้อยู่"
MSN

FYI Link ตายในอันนี้
jjxtra

14

ดูเหมือนจะไม่มีใครสัมผัสได้ว่าหากคุณมีแอปพลิเคชั่น 32 บิตที่แตกต่างกันมากมายระบบย่อย wow64 สามารถแมปได้ทุกที่ในหน่วยความจำที่สูงกว่า 4G ดังนั้นบนหน้าต่าง 64 บิตที่มีหน่วยความจำเพียงพอคุณสามารถเรียกใช้แอปพลิเคชัน 32 บิตได้อีกมากมาย มากกว่าระบบ 32 บิตดั้งเดิม


7
คุณกำลังพูดถึง RAM จริงซึ่ง OP กำลังพูดถึงหน่วยความจำเสมือน แม้ในระบบ 32 บิตคุณสามารถเรียกใช้แอปพลิเคชันจำนวนมากได้ตราบใดที่ไฟล์เพจของคุณมีขนาดใหญ่พอ
Thomas Weller

8

กระบวนการ 32 บิตยังคงถูก จำกัด ไว้ที่ข้อ จำกัด เดียวกันในระบบปฏิบัติการ 64 บิต ปัญหาคือตัวชี้หน่วยความจำมีความกว้างเพียง 32 บิตดังนั้นโปรแกรมจึงไม่สามารถกำหนด / แก้ไขที่อยู่หน่วยความจำที่มีขนาดใหญ่กว่า 32 บิตได้


4
สิ่งนี้จะมีประโยชน์หากคุณระบุให้ชัดเจนว่า 32 บิตมีพื้นที่ว่าง 4GB
วิศวกร

4

กระบวนการ 32 บิตเดียวภายใต้ระบบปฏิบัติการ 64 บิตถูก จำกัด ไว้ที่ 2Gb แต่ถ้าคอมไพล์เป็นไฟล์ EXE ด้วยIMAGE_FILE_LARGE_ADDRESS_AWAREชุดบิตจะมีขีด จำกัด 4 GB ไม่ใช่ 2Gb - ดูhttps://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

สิ่งที่คุณได้ยินเกี่ยวกับแฟล็กการบูตแบบพิเศษ 3 GB /3GBสวิตช์หรือ/uservaทั้งหมดเกี่ยวกับระบบปฏิบัติการ 32 บิตและไม่มีผลกับ Windows 64 บิต

ดูhttps://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspxสำหรับรายละเอียดเพิ่มเติม

สำหรับระบบปฏิบัติการ 32 บิตตรงกันข้ามกับความเชื่อนั้นไม่มีขีด จำกัด ทางกายภาพของ 4GB สำหรับระบบปฏิบัติการ 32 บิต ตัวอย่างเช่นระบบปฏิบัติการเซิร์ฟเวอร์ 32 บิตเช่น Microsoft Windows Server 2008 32 บิตสามารถเข้าถึงได้สูงสุด64 GB(Windows Server 2008 Enterprise และ Datacenter editions) - โดยใช้ Physical Address Extension (PAE) ซึ่ง Intel เปิดตัวครั้งแรกใน Pentium Pro และต่อมาโดย AMD ในโปรเซสเซอร์ Athlon กำหนดลำดับชั้นของตารางเพจเป็นสามระดับ ด้วยรายการตาราง 64 บิตแต่ละรายการแทนที่จะเป็น 32 ทำให้ซีพียูเหล่านี้สามารถเข้าถึงพื้นที่แอดเดรสทางกายภาพที่มีขนาดใหญ่กว่า 4 กิกะไบต์ได้โดยตรงดังนั้นในทางทฤษฎีระบบปฏิบัติการ 32 บิตสามารถเข้าถึงได้ 2 ^ 64 ไบต์ในทางทฤษฎีหรือ 17,179,869,184 กิกะไบต์ แต่เซ็กเมนต์คือ จำกัด โดย 4GB อย่างไรก็ตามเนื่องจากเหตุผลทางการตลาด Microsoft จึง จำกัด หน่วยความจำที่สามารถเข้าถึงได้สูงสุดบนระบบปฏิบัติการที่ไม่ใช่เซิร์ฟเวอร์ให้เหลือเพียง 4GB หรือแม้กระทั่ง 3GB อย่างมีประสิทธิภาพ ดังนั้นกระบวนการเดียวสามารถเข้าถึงได้มากกว่า 4GB บนระบบปฏิบัติการ 32 บิตและเซิร์ฟเวอร์ Microsoft SQL เป็นตัวอย่าง

กระบวนการ 32 บิตภายใต้ Windows 64 บิตไม่มีข้อเสียใด ๆ เมื่อเทียบกับกระบวนการ 64 บิตในการใช้พื้นที่แอดเดรสเสมือนของเคอร์เนลที่ใช้ร่วมกัน (เรียกอีกอย่างว่าพื้นที่ระบบ ) กระบวนการทั้งหมดไม่ว่าจะเป็น 64 บิตหรือ 32 บิตภายใต้ Windows 64 บิตจะใช้พื้นที่ระบบ 64 บิตเหมือนกัน

เนื่องจากพื้นที่ระบบถูกแชร์ในทุกกระบวนการบนWindows 32 บิตกระบวนการที่สร้างแฮนเดิลจำนวนมาก (เช่นเธรดเซมาโฟเรสไฟล์ ฯลฯ ) ใช้พื้นที่ระบบโดยวัตถุเคอร์เนลและหน่วยความจำอาจหมดแม้กระทั่ง หากคุณมีหน่วยความจำทั้งหมด ในทางตรงกันข้ามบนWindows 64 บิตพื้นที่เคอร์เนลคือ 64 บิตและไม่ จำกัด ด้วย 4 GB ทุกระบบสายทำโดยการใช้งานแบบ 32 บิตจะถูกแปลงเป็นพื้นเมืองสาย 64 บิตในโหมดผู้ใช้


1
คำถามนี้ถามเกี่ยวกับหน่วยความจำที่กระบวนการเดียวสามารถเข้าถึงได้มากเพียงใด ซึ่งถูก จำกัด ด้วยพื้นที่แอดเดรสหน่วยความจำเสมือน 32 บิต แน่ใจว่าคุณสามารถมีกระบวนการแบบ 32 บิตหลายแต่ละใช้ 4GB บนคอมพิวเตอร์เครื่องเดียวกันแม้จะมีระบบปฏิบัติการ 32 บิตโดยใช้ PAE แต่นั่นไม่ใช่สิ่งที่นี้คำถามที่จะขอ
Peter Cordes

@PeterCordes - ขออภัยและขอบคุณ - ฉันได้อัปเดตคำตอบเกี่ยวกับขีด จำกัด 2GB / 4GB
Maxim Masiutin

@PeterCordes ขอบคุณสำหรับคำพูดของคุณฉันได้อัปเดตการตอบกลับเพื่อเน้นว่ากระบวนการ 32 บิตหลายรายการสามารถใช้ 4GB บนคอมพิวเตอร์เครื่องเดียวกันได้แม้จะใช้ระบบปฏิบัติการ 32 บิตที่ใช้ PAE และกระบวนการ 32 บิตภายใต้ 64- ระบบปฏิบัติการบิตไม่ได้รับผลกระทบจากการ จำกัด พื้นที่ระบบ 2GB ซึ่งเป็นปัญหาภายใต้ระบบปฏิบัติการ 32 บิต
Maxim Masiutin

-1

คุณมีข้อ จำกัด พื้นฐานเหมือนกันเมื่อเรียกใช้กระบวนการ 32 บิตภายใต้ Win64 แอปของคุณทำงานในระบบ 32 แต่ระบบย่อยซึ่งทำงานได้ดีที่สุดเหมือน Win32 และจะรวมถึงข้อ จำกัด หน่วยความจำสำหรับกระบวนการของคุณ (2GB ต่ำกว่าสำหรับคุณ 2GB บนสำหรับระบบปฏิบัติการ)


-11

ขีด จำกัด ไม่ใช่ 2g หรือ 3gb เป็น 4gb สำหรับ 32 บิต

เหตุผลที่คนคิดว่า 3gb คือระบบปฏิบัติการแสดง 3gb ฟรีเมื่อพวกเขามี ram ระบบ 4gb จริงๆ

RAM รวม 4GB. ดังนั้นหากคุณมีการ์ดแสดงผลขนาด 1 GB ที่นับเป็นส่วนหนึ่งของหน่วยความจำทั้งหมดที่ดูโดยระบบปฏิบัติการ 32 บิต

4ig ไม่ใช่ 3 ไม่ใช่ 2 ได้ไหม


2
นั่นไม่ถูกต้อง สำหรับระบบ x86 มาตรฐาน (ไม่มีส่วนขยายหน่วยความจำ) เคอร์เนลสามารถเข้าถึงพื้นที่หน่วยความจำ 4GiB ได้เต็มรูปแบบ (แม้ว่าคอมพิวเตอร์จะมี ram เพียง 1GiB เนื่องจากการเพจ) เคอร์เนลขอสงวน 2GiB บน (เมล็ดบางส่วนสำรอง 1GiB หรือ 3GiB แทน) เพื่อใช้เอง หน่วยความจำเสมือนของแต่ละกระบวนการยังมีการแมปหน่วยความจำสงวนของเคอร์เนลดังนั้นกระบวนการจึงไม่สามารถใช้หน่วยความจำ 2GiB ได้
Alex Jorgenson

3
นอกจากนี้การ์ดแสดงผลไม่เกี่ยวข้องกับจำนวนหน่วยความจำที่กระบวนการสามารถใช้ได้ ตาราง ACPI หน่วยความจำที่แมป IO ฯลฯ ใช้ที่อยู่หน่วยความจำฟิสิคัล แต่หลีกเลี่ยงไม่ได้เนื่องจากหน่วยความจำเสมือน
Alex Jorgenson

1
สิ่งนี้ไม่ถูกต้อง Microsoft เลือก (ตัวเลือกการออกแบบ) เพื่อแบ่งพื้นที่แอดเดรสเสมือน 32 บิตกับ Windows NT เพื่อให้ 2GB สงวนไว้สำหรับการแมป OS (การเรียกใช้ไดรเวอร์ / API / ระบบ ฯลฯ ) และเหลือ 2GB สำหรับการใช้งานแอป / สวิตช์บูต 3GB เปลี่ยนพฤติกรรมนี้ (1GB สำหรับการแมป OS, 3GB สำหรับรหัสแอป) ฉันออกจากการค้นหาเอกสารสถาปัตยกรรมหน่วยความจำเสมือน Windows NT 3.x แบบเก่าเป็นแบบฝึกหัดสำหรับผู้อ่าน :-)
ripvlan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.