ระบบ 32- บิตกับ 64- บิต


224

ความแตกต่างระหว่างระบบ 32- บิตและ 64- บิตคืออะไร?

หากคุณใช้ทั้งสองอย่างคุณมีความแตกต่างอะไรมาก

เป็นปัญหาหรือไม่ที่จะใช้โปรแกรม 32- บิตกับระบบ 64- บิตในบางกรณี?


มีหลาย confusions ที่นี่และอื่น ๆ ที่บนเว็บระหว่างทางกายภาพที่อยู่ (การเข้าถึง ram) กฟภ. ส่งผลกระทบต่อเรื่องนี้คณะกรรมการแม่ส่งผลกระทบต่อเรื่องนี้และที่อยู่ตรรกะ (หน่วยความจำเสมือนต่อกระบวนการ) ใน 32 บิตระบบปฏิบัติการหน่วยความจำเสมือนถูก จำกัด ไว้ที่ 4GB ลบสิ่งที่เคอร์เนลขอสงวน มันเป็นอิสระจาก RAM คุณอาจมี 0.1MB หรือ 8GB RAM และคุณจะมีหน่วยความจำเสมือน 4GB อย่างแน่นอน (แต่บางส่วนถูกสงวนไว้โดยเคอร์เนล) PEA สามารถใช้เพื่อให้มี RAM เพิ่มขึ้น แต่ไม่ใช่คำตอบที่สมบูรณ์แบบเนื่องจากเคอร์เนลไม่สามารถเข้าถึงได้ทั้งหมด
ctrl-alt-delor

คำตอบ:


264

หมายเหตุ: คำตอบเหล่านี้นำไปใช้กับพีซีซีพียูที่ใช้ x86 มาตรฐาน (Intel และ AMD) และ Windows (ตามปกติจะถูกกำหนดค่าสำหรับผู้ใช้ปลายทาง) ชิปอื่น ๆ แบบ 32 บิตหรือ 64 บิตระบบปฏิบัติการอื่น ๆ และการกำหนดค่าระบบปฏิบัติการอื่น ๆ อาจมีการแลกเปลี่ยนที่แตกต่างกัน

จากมุมมองทางเทคนิคระบบปฏิบัติการ 64 บิตให้คุณ:

  • อนุญาตให้แต่ละกระบวนการประมวลผลที่อยู่ของ RAM มากกว่า 4 GB แต่ละตัว (ในทางปฏิบัติส่วนใหญ่ แต่ไม่ใช่ OS 32 บิตทั้งหมดยัง จำกัด RAM ของระบบที่ใช้งานได้ทั้งหมดให้เหลือน้อยกว่า 4 GB ไม่ใช่เฉพาะสูงสุดต่อแอปพลิเคชัน)

  • พอยน์เตอร์ทั้งหมดใช้เวลา 8 ไบต์แทนที่จะเป็น 4 ไบต์ ผลกระทบต่อการใช้ RAM นั้นน้อยมาก (เพราะคุณไม่น่าจะมีแอพพลิเคชั่นที่เต็มไปด้วยกิกะไบต์ของพอยน์เตอร์) แต่ในกรณีที่เลวร้ายที่สุดในทางทฤษฎีสิ่งนี้สามารถทำให้แคช CPU สามารถเก็บ 1/2 พอยน์เตอร์ได้ มันจะมีประสิทธิภาพขนาด 1/2) สำหรับแอปพลิเคชันส่วนใหญ่นี่ไม่ใช่เรื่องใหญ่

  • มีการลงทะเบียน CPU สำหรับวัตถุประสงค์ทั่วไปมากมายในโหมด 64 บิต การลงทะเบียนเป็นหน่วยความจำที่เร็วที่สุดในระบบทั้งหมดของคุณ มีเพียง 8 ในโหมด 32 บิตและ 16 จุดประสงค์ทั่วไปในการลงทะเบียนในโหมด 64 บิต ในแอปพลิเคชันการคำนวณทางวิทยาศาสตร์ที่ฉันเขียนฉันได้เห็นประสิทธิภาพที่เพิ่มขึ้น 30% โดยการคอมไพล์ใหม่ในโหมด 64 บิต (แอปพลิเคชันของฉันสามารถใช้การลงทะเบียนเพิ่มเติมจริง ๆ )

  • ระบบปฏิบัติการ 32 บิตส่วนใหญ่อนุญาตให้แต่ละแอปพลิเคชันใช้ RAM ขนาด 2 GB เท่านั้นแม้ว่าคุณจะติดตั้ง 4 GB ก็ตาม นี่เป็นเพราะพื้นที่ที่อยู่ 2 GB สำรองไว้สำหรับการแชร์ข้อมูลระหว่างแอปพลิเคชั่นกับระบบปฏิบัติการและสำหรับการสื่อสารกับไดรเวอร์ Windows และ Linux จะให้คุณปรับการแลกเปลี่ยนนี้เป็น 3 GB สำหรับแอปพลิเคชันและ 1 GB ที่แชร์ แต่อาจทำให้เกิดปัญหากับแอปพลิเคชั่นบางตัวที่ไม่คาดว่าจะมีการเปลี่ยนแปลง ฉันเดาด้วยว่ามันอาจทำลายการ์ดกราฟิกที่มี RAM 1 GB (แต่ฉันไม่แน่ใจ) ระบบปฏิบัติการ 64 บิตสามารถให้แอปพลิเคชั่น 32- บิตแต่ละตัวใกล้เคียงกับ 4 GB เต็มรูปแบบในการเล่น

จากมุมมองของผู้ใช้:

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

  • หากคุณมีแอปพลิเคชันหมูหน่วยความจำ (เช่นโปรแกรมแก้ไขภาพถ่ายการประมวลผลวิดีโอการคำนวณทางวิทยาศาสตร์ ฯลฯ ) หากคุณมี (หรือสามารถซื้อ) RAM มากกว่า 3 GB และคุณสามารถรับแอปพลิเคชันรุ่น 64 บิต ตัวเลือกนั้นง่าย: ใช้ระบบปฏิบัติการ 64 บิต

  • ฮาร์ดแวร์บางตัวไม่มีไดรเวอร์ 64 บิต ตรวจสอบแผงวงจรหลักการ์ดปลั๊กทั้งหมดและอุปกรณ์ USB ทั้งหมดก่อนทำการสวิตช์ โปรดทราบว่าในช่วงแรก ๆ ของ Windows Vista มีปัญหามากมายเกี่ยวกับไดรเวอร์ ทุกวันนี้สิ่งต่าง ๆ โดยทั่วไปดีกว่า

  • หากคุณใช้งานแอพพลิเคชั่นจำนวนมากในเวลาที่ RAM ของคุณหมด (โดยปกติคุณสามารถบอกได้ว่าเพราะคอมพิวเตอร์ของคุณเริ่มช้าลงอย่างมากและคุณได้ยินเสียงฮาร์ดไดรฟ์กระทืบ) คุณจะต้องการระบบปฏิบัติการ 64 บิต (และ RAM เพียงพอ)

  • คุณสามารถเรียกใช้แอปพลิเคชัน 32 บิต (แต่ไม่ใช่ไดรเวอร์) ใน Windows 64 บิตโดยไม่มีปัญหา การชะลอตัวที่เลวร้ายที่สุดที่ฉันวัดได้สำหรับแอปพลิเคชัน 32 บิตใน Windows 64 บิตคือประมาณ 5% (หมายความว่าถ้าใช้เวลา 60 วินาทีในการทำบางสิ่งใน Windows 32 บิตจะใช้เวลาสูงสุด 60 * 1.05 = 65 วินาทีด้วย แอปพลิเคชัน 32 บิตเดียวกันใน Windows 64 บิต)

สิ่งที่ 32- บิตกับ 64- บิตไม่ได้หมายความว่า:

บนระบบ x86, 32- บิตกับ 64- บิตอ้างอิงโดยตรงกับขนาดของพอยน์เตอร์ นั่นคือทั้งหมดที่

  • มันไม่ได้อ้างถึงขนาดของintประเภทC นั่นเป็นการตัดสินใจโดยการนำคอมไพเลอร์มาใช้โดยเฉพาะและคอมไพเลอร์ยอดนิยมส่วนใหญ่เลือก 32- บิตintบนระบบ 64- บิต

  • มันไม่ได้อ้างอิงโดยตรงกับขนาดของการลงทะเบียนที่ไม่ใช่ตัวชี้ปกติ อย่างไรก็ตามการใช้การลงทะเบียนทางคณิตศาสตร์แบบ 64 บิตเกิดขึ้นเพื่อให้แอปพลิเคชันและระบบปฏิบัติการกำลังทำงานในโหมดตัวชี้แบบ 64 บิตเช่นกัน

  • มันไม่ได้อ้างอิงโดยตรงกับขนาดของบัสแอดเดรสทางกายภาพ ตัวอย่างเช่นระบบที่มีแคชบรรทัดกว้าง 64 บิตและหน่วยความจำสูงสุด 512GiB ต้องการเพียง 33 บิตในแอดเดรสบัส (เช่นlog2(512*1024**3) - log2(64) = 33)

  • ไม่ได้อ้างอิงขนาดของบัสข้อมูลจริง: นั่นเกี่ยวข้องกับต้นทุนการผลิต (จำนวนพินในซ็อกเก็ต CPU) และขนาดแคชของสาย


8
คำตอบที่ดีมาก โดยเฉพาะอย่างยิ่งเพราะคุณสังเกตว่าไม่มีขีด จำกัด RAM จริง 4gb แต่ประมวลผลขีด จำกัด การใช้หน่วยความจำ เพียงแค่ให้ข้อมูลของคุณผมคิดว่าคุณควรจะดูที่ลิงค์นี้: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Breakthrough

8
เป็นแอปพลิเคชันที่ไม่ทำงานบน Windows 64 บิต: แอปพลิเคชัน 16 บิต / ผู้ที่ใช้ไดรเวอร์ 32 บิตหรือโหมดเคอร์เนลที่ไม่ได้ลงชื่อ นั่นเป็นจำนวนมากสำหรับผู้ที่ติดซอฟแวร์เช่นฉัน ...
fluxtendu

1
@flextendu ตามข้อกำหนดด้านประสิทธิภาพของโปรแกรมเก่าเหล่านั้นคุณสามารถเรียกใช้พวกเขาในเครื่องเสมือนได้ ด้วยเครื่องเล่น VMware, Virtual PC และ Virtual Box ไม่มีเหตุผลที่จะไม่ลองใช้หนึ่งในนั้นหากคุณมีใบอนุญาต Windows 32 บิต หากคุณไม่ต้องการยุ่งกับสิ่งเหล่านี้พวกเขาอาจจะทำงานภายใต้ "โหมด Windows XP" ได้เช่นกัน
Mark Booth

6
แอปพลิเคชัน BTW แบบ 32 บิตจะไม่ใช้ RAM มากกว่า 2 GiB ยกเว้นว่ามีการเปิดใช้งานการตั้งค่าสถานะเฉพาะในรายการของพวกเขา ที่มา: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71

ใช่ฉันแน่ใจว่า Hello71 ได้ตีสิ่งที่สำคัญที่ไม่ได้กล่าวถึง: แอพ 32 บิตส่วนใหญ่จะไม่ใช้ประโยชน์จาก RAM เสริมโดยตรง ฉันคิดว่านี่น่าพูดถึงเลยเหรอ?
Django Reinhardt

107

โดยทั่วไปคุณสามารถทำทุกอย่างให้ใหญ่ขึ้นได้:

  1. RAM ต่อระบบปฏิบัติการ:ขีด จำกัด RAM ที่ 4GB บน x86 สำหรับระบบปฏิบัติการ (ส่วนใหญ่)
  2. RAM ต่อกระบวนการ:ขีด จำกัด RAM ที่ 4GB บน x86 สำหรับกระบวนการ (เสมอ) หากคุณคิดว่าสิ่งนี้ไม่สำคัญให้ลองใช้แอปพลิเคชั่นที่ต้องใช้ฐานข้อมูลขนาดใหญ่ MSSQL มันจะใช้> 4GB เองถ้าคุณมีและพร้อมใช้งานได้ดีกว่ามาก
  3. ที่อยู่:ที่อยู่คือ 64 บิตแทนที่จะเป็น 32 บิตช่วยให้คุณมีโปรแกรม "ใหญ่กว่า" ที่ใช้หน่วยความจำมากขึ้น
  4. จัดการพร้อมใช้งานกับโปรแกรม:คุณสามารถสร้างการจัดการไฟล์เพิ่มเติม ... ตัวอย่างบน Windows x64 คุณสามารถสร้าง> 2,000 เธรดต่อกระบวนการ แต่ใน x86 ใกล้เคียงกับสองสามร้อย
  5. มีโปรแกรมที่กว้างกว่า:จาก x64 คุณสามารถเรียกใช้ทั้งโปรแกรม x86 และ x64 (ตัวอย่าง windows: wow64, windows32 ในการจำลอง windows64)
  6. ตัวเลือกการจำลอง:จาก x64 คุณสามารถรันทั้ง x86 และ x64 VM
  7. เร็วกว่า: การคำนวณบางอย่างเร็วขึ้นบน CPU 64 บิต
  8. การแบ่งทรัพยากรหลาย ๆ ระบบ:หน่วยความจำ RAM จำนวนมากมีความสำคัญมากเมื่อคุณต้องการเรียกใช้อย่างน้อยหนึ่ง VM ซึ่งแบ่งทรัพยากรระบบของคุณ
  9. มีโปรแกรมพิเศษ:โปรแกรมใหม่หลายโปรแกรมรองรับเฉพาะ x64 ตัวอย่าง Exchange 2007
  10. ในอนาคต x86 ล้าสมัย?:เมื่อเวลาผ่านไปจะใช้ 64 บิตมากขึ้นเรื่อย ๆ และจะไม่ใช้ x86 มากขึ้นเรื่อย ๆ ดังนั้นผู้ขายจะสนับสนุนเพียง 64- บิตมากขึ้น

สถาปัตยกรรม 64 บิตขนาดใหญ่ 2 ประเภทคือสถาปัตยกรรม x64 และ IA64 แต่ x64 เป็นที่นิยมมากที่สุด

x64 สามารถเรียกใช้คำสั่ง x86 ได้เช่นเดียวกับคำสั่ง x64 IA64 รันคำสั่ง x86 เช่นกัน แต่ไม่ได้ใช้ส่วนขยาย SSE มีฮาร์ดแวร์เฉพาะสำหรับ Itanium สำหรับการรันคำสั่ง x86 มันเป็นตัวเลียนแบบ แต่ในฮาร์ดแวร์

ในฐานะที่เป็น @Phil พูดถึงคุณสามารถได้รับการมองลึกของวิธีการทำงานที่นี่


1
หนอ IA64 รันคำสั่ง x86 แต่ไม่ได้ใช้ส่วนขยาย SSE มีฮาร์ดแวร์เฉพาะสำหรับ Itanium สำหรับการรันคำสั่ง x86 มันเป็นตัวเลียนแบบ แต่ในฮาร์ดแวร์
tzot

2
ไม่กี่ปีที่ผ่านมาเรย์มอนด์เฉินโพสต์เกี่ยวกับ "ขีด จำกัด " 2,000 เธรดและมันก็เป็นตำนานเมืองมากขึ้นหรือน้อยลง: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e

โหวตขึ้นสำหรับ Arstechnica สำหรับคำอธิบายของพวกเขา
Avihu Turzion

2
ขีด จำกัด ของ RAM 4GB ไม่เป็นความจริงเลยทีเดียว (มันค่อนข้างเป็นขีด จำกัด ของเทียมใส่ในบ้านผู้ใช้ระบบ Windows) ตรวจสอบบริษัท พีเออี ด้วยฮาร์ดแวร์ที่ทันสมัยที่สุดเคอร์เนล Linux PAE (ซึ่งเป็นสิ่งที่ใช้โดยค่าเริ่มต้นสำหรับ 32 บิต) สามารถจัดการที่อยู่ได้มากกว่า 4GB ได้ดี เช่นเดียวกับ FreeBSD และ NetBSD
Izzy

ระบบ 32 บิตไม่สามารถใช้มากกว่า 4GB (punct ที่ 1) ได้เนื่องจาก "address" (punct ที่ 3) เนื่องจากหมายเลข 32 บิตสูงสุดคือ 4.294.967.296 (= 4GB) ดังนั้น puncts ที่ 1 และ 3 ของคุณคือ SAME คุณสามารถลบ punct ที่ 3 :)
เจ็ต

46

ผลกระทบที่ใหญ่ที่สุดที่ผู้คนจะสังเกตเห็นในขณะนี้คือพีซีแบบ 32 บิตสามารถจัดการหน่วยความจำได้สูงสุด 4GB เท่านั้น เมื่อคุณถอดหน่วยความจำที่จัดสรรสำหรับการใช้งานอื่น ๆ โดยระบบปฏิบัติการพีซีของคุณอาจแสดงหน่วยความจำที่ใช้งานได้ประมาณ 3.25GB เท่านั้น เลื่อนไปที่ 64 บิตและขีด จำกัด นี้จะหายไป

หากคุณกำลังพัฒนาอย่างจริงจังสิ่งนี้อาจสำคัญมาก ลองใช้เครื่องเสมือนหลายเครื่องและคุณใช้หน่วยความจำไม่เพียงพอ เซิร์ฟเวอร์มีแนวโน้มที่จะต้องการหน่วยความจำเพิ่มเติมดังนั้นคุณจะพบว่าการใช้ 64 บิตนั้นดีกว่าบนเซิร์ฟเวอร์มากกว่าบนเดสก์ท็อป กฎของมัวร์ทำให้มั่นใจได้ว่าเราจะมีหน่วยความจำเพิ่มมากขึ้นในเครื่องและในบางจุดเดสก์ท็อปก็จะเปลี่ยนเป็น 64 บิตเป็นมาตรฐาน

สำหรับรายละเอียดอื่น ๆ อีกมากมายของความแตกต่างของตัวประมวลผลตรวจสอบบทความที่ยอดเยี่ยมนี้จากArsTechnica


7
แพลตฟอร์ม 32- บิตและข้อ จำกัด 4GB เป็นของผู้เรียกชื่อผิดและเป็น (เป็น) ส่วนใหญ่เป็นข้อ จำกัด ทางเลือก / การออกแบบสถาปัตยกรรมระบบปฏิบัติการ จริง ๆ แล้ว 4GB จาก 32-bits นั้น จำกัด อยู่ในพื้นที่ VA ของกระบวนการ ที่อยู่ทางกายภาพรองรับ 36 บิตใน Intel 32 บิต CPU
Tall Jeff

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

2
ชื่นชมจุดของคุณ แต่เพียงแค่พยายามขับความคิดที่ว่าการแก้ไขไม่ได้อยู่ในโปรเซสเซอร์หรือไปที่ 64- บิตมันเป็นเพียงเรื่องของการออกแบบระบบปฏิบัติการที่ได้รับการปรับปรุงเล็กน้อย สิ่งนี้ได้รับการแก้ไขยกตัวอย่างเช่นใน Windows รุ่นองค์กรแม้จะอยู่ในรุ่น 32 บิต มันช่วยให้ RAM 64GB
เจฟฟ์ Tall

ในทางเทคนิคแล้วขีด จำกัด ไม่ได้หายไป มันเคลื่อนไปไกลกว่าที่มันเป็นไปไม่ได้ / เป็นไปไม่ได้ที่จะติดตั้ง RAM จำนวนมากบนเครื่องตลอดเวลาในทศวรรษหน้า

ดูข้อสังเกตของฉันเกี่ยวกับPAEด้านบน: ขีด จำกัด 4GB ไม่เป็นความจริงสำหรับทั้งระบบ - แต่ใช้กับกระบวนการเดียวเท่านั้น (ไม่มีกระบวนการใดที่สามารถเข้าถึง 4GB และสูงกว่าได้ - แต่ทั้งระบบเช่นกระบวนการทั้งหมดเข้าด้วยกันสามารถเปิดใช้งาน PAE ได้ ) ดังนั้นหากไม่มีแอพพลิเคชั่นที่ได้กำไรจากความสามารถในการเข้าถึง 4GB และสูงกว่า (เช่น Video Editors / Converter ที่มีไฟล์วิดีโอขนาดใหญ่) และ 8GB + ที่ติดตั้งไว้มันไม่ควรสร้างความแตกต่างมากนักว่าใช้ 32 บิตหรือ 64 บิต
Izzy

31

ไม่มีอะไรฟรี: แม้ว่าแอพพลิเคชั่น 64 บิตสามารถเข้าถึงหน่วยความจำได้มากกว่าแอพพลิเคชั่น 32 บิต แต่ข้อเสียคือพวกเขาต้องการหน่วยความจำเพิ่มขึ้น พอยน์เตอร์เหล่านั้นทั้งหมดที่ใช้ในการต้อง 4 ไบต์ตอนนี้พวกเขาต้องการ 8 ตัวอย่างเช่นความต้องการเริ่มต้นใน Emacs คือหน่วยความจำเพิ่มเติม 60% เมื่อสร้างขึ้นสำหรับสถาปัตยกรรม 64 บิต รอยเท้าพิเศษนี้ส่งผลกระทบต่อประสิทธิภาพการทำงานในทุกระดับของลำดับชั้นหน่วยความจำ: ไฟล์เรียกทำงานที่ใหญ่กว่าใช้เวลาโหลดจากดิสก์นานกว่าชุดทำงานที่ใหญ่ขึ้นทำให้เพจและวัตถุที่ใหญ่กว่าหมายถึงแคชในโปรเซสเซอร์น้อยลง หากคุณนึกถึง CPU ที่มีแคช 16K L1 แอปพลิเคชันแบบ 32 บิตสามารถทำงานกับตัวชี้ 4096 ก่อนที่มันจะหายไปและไปที่แคช L2 แต่แอปพลิเคชัน 64 บิตจะต้องเข้าถึงแคช L2 หลังจากเพียง 2048 พอยน์เตอร์

ใน x64 สิ่งนี้จะถูกลดทอนลงจากการปรับปรุงสถาปัตยกรรมอื่น ๆ เช่นการลงทะเบียนมากกว่า แต่ใน PowerPC หากแอปพลิเคชันของคุณไม่สามารถใช้> 4G ก็น่าจะทำงานได้เร็วขึ้นใน "ppc" มากกว่า "ppc64" แม้แต่ใน Intel ก็ยังมีเวิร์กโหลดที่ทำงานเร็วกว่าใน x86 และทำงานน้อยกว่า 5% เร็วกว่าใน x64 กว่า x86


2
คำตอบนี้แสดงให้เห็นว่า PowerPC64 ไม่ดีเท่า x86-64 ความจริงก็คือ powerpc64 ไม่ได้ปรับปรุง powerpc เนื่องจาก powerpc ไม่เสียหาย
ctrl-alt-delor

3
Linux มี x32 ABI พร้อมประโยชน์ความเร็วทั้งหมดของ x86-64 (มีการลงทะเบียนมากกว่า ABI ที่ออกแบบใหม่) แต่มีตัวชี้ 32 บิต +1 สำหรับการชี้ให้เห็นว่าประโยชน์ของโหมด 64 บิตไม่ได้มาจากความกว้างจริงที่เพิ่มขึ้น แต่จากโอกาสที่จะทิ้งสัมภาระจำนวนมากที่ถือสถาปัตยกรรมกลับมา 64 บิต regs มีค่าสำหรับบางแอปพลิเคชัน แต่พื้นที่ตัวชี้ 64 บิตไม่จำเป็นต้องใช้บ่อย
Peter Cordes

19

ระบบปฏิบัติการ 64 บิตสามารถใช้ RAM ได้มากกว่านี้ ในทางปฏิบัติแล้ว 64-bit Vista / 7 ใช้คุณลักษณะด้านความปลอดภัยที่น่าพิศวงมากขึ้นสำหรับสถานที่ที่พวกเขาวางองค์ประกอบสำคัญใน RAM แต่นั่นไม่ใช่ 'น่าสังเกต' เช่นนั้น

จาก ChrisInEdmonton:

ระบบปฏิบัติการ 32 บิตบนระบบ ix86 ที่มี PAE สามารถระบุ RAM ได้สูงสุด 64 GB ระบบปฏิบัติการ 64 บิตบน x86-64 สามารถเข้าถึงพื้นที่ที่อยู่เสมือนได้ถึง 256 TB ถึงแม้ว่าสิ่งนี้อาจได้รับการเพิ่มในตัวประมวลผลที่ตามมาสูงถึง 16 EB โปรดทราบว่าระบบปฏิบัติการบางระบบจะ จำกัด พื้นที่ที่อยู่เพิ่มเติมและเมนบอร์ดส่วนใหญ่จะมีข้อ จำกัด เพิ่มเติม


4
สำหรับระบบปฏิบัติการ 32- บิตเทียบกับ 64- บิตเท่านั้นอ้างถึงขนาดของพอยน์เตอร์ (สิ่งที่ย่อหน้าแรกของคุณอธิบายอย่างถูกต้อง) -1: ระบบปฏิบัติการบางระบบเลือกที่จะล็อคขนาดจำนวนเต็มเริ่มต้นเป็นขนาดตัวชี้ แต่ไม่มีทั้ง Windows และ Linux ความแม่นยำของเลขจำนวนเต็มไม่เปลี่ยนแปลง ไม่มีระบบปฏิบัติการที่ใช้กันอย่างแพร่หลายเปลี่ยนความแม่นยำจุดลอยตัว (สิ่งที่วรรคสองอ้างว่า) "float" หรือ "single" เป็น 32- บิต, "double" เป็น 64- บิตโดยไม่คำนึงว่าระบบปฏิบัติการจะใช้ตัวชี้ 32- บิตหรือ 64- บิต
Mr Fooz

อ่าผมเข้าใจผิดอย่างชัดเจนขอบคุณสำหรับการล้างที่ขึ้น :)
Phoshi

ไม่มีปัญหา. -1 -> +1
Mr Fooz

อาจคุ้มค่าที่จะแก้ไขคำตอบของคุณเพื่อระบุจำนวน RAM ที่สามารถเข้าถึงได้ ระบบปฏิบัติการ 32 บิตบนระบบ ix86 ที่มี PAE สามารถระบุ RAM ได้สูงสุด 64 GB ระบบปฏิบัติการ 64 บิตบน x86-64 สามารถเข้าถึงพื้นที่ที่อยู่เสมือนได้ถึง 256 TB ถึงแม้ว่าสิ่งนี้อาจได้รับการเพิ่มในตัวประมวลผลที่ตามมาสูงถึง 16 EB โปรดทราบว่าระบบปฏิบัติการบางระบบจะ จำกัด พื้นที่ที่อยู่เพิ่มเติมและเมนบอร์ดส่วนใหญ่จะมีข้อ จำกัด เพิ่มเติม
ChrisInEdmonton

ฉันต้องการทำให้มันง่ายเพราะตัวเลขส่วนใหญ่สูงพอที่จะไม่เกี่ยวข้องในขณะนี้ แต่ตอนนี้ฉันไม่สามารถทำร้ายพวกเขาได้
Phoshi

14

ไม่แน่ใจว่าฉันสามารถตอบคำถามทั้งหมดของคุณได้โดยไม่ต้องเขียนเรียงความทั้งหมด (มี Google อยู่เสมอ ... ) แต่คุณไม่จำเป็นต้องออกแบบแอพของคุณต่างไปสำหรับ 64 บิต ฉันเดาว่าสิ่งที่ถูกอ้างถึงคือคุณต้องคำนึงถึงสิ่งต่าง ๆ เช่นขนาดตัวชี้ไม่ใช่ขนาดเดียวกันกับ ints อีกต่อไป และคุณมีปัญหามากมายที่อาจเกิดขึ้นได้ด้วยสมมติฐานแบบ inbuilt กับข้อมูลบางประเภทซึ่งมีความยาวสี่ไบต์ซึ่งอาจไม่เป็นจริงอีกต่อไป

สิ่งนี้มีความเป็นไปได้ที่จะรวบรวมข้อมูลทุกชนิดในแอปพลิเคชันของคุณ - ทุกอย่างตั้งแต่การบันทึก / โหลดจากไฟล์การวนซ้ำข้อมูลการจัดแนวข้อมูลจนถึงการดำเนินการข้อมูลระดับบิต หากคุณมี codebase อยู่แล้วที่คุณพยายามพอร์ตหรือทำงานทั้งสองอย่างอาจเป็นไปได้ว่าคุณจะมี niggles เล็ก ๆ น้อย ๆ จำนวนมากในการทำงาน

ฉันคิดว่านี่เป็นปัญหาการใช้งานมากกว่าที่จะออกแบบ นั่นคือฉันคิดว่า "การออกแบบ" ของการพูดแพคเกจการแก้ไขภาพจะเหมือนกันทุกอย่างที่คำพูด เราเขียนโค้ดที่คอมไพล์ทั้งรุ่น 32 บิตและ 64 บิตและการออกแบบไม่ได้แตกต่างกันอย่างสิ้นเชิงระหว่างสอง - มันเป็นรหัสฐานเดียวกัน

พื้นฐาน "เรื่องใหญ่" บน 64 บิตคือคุณสามารถเข้าถึงพื้นที่ที่อยู่หน่วยความจำขนาดใหญ่กว่า 32 บิต ซึ่งหมายความว่าคุณสามารถโยนหน่วยความจำมากกว่า 4Gb ลงในคอมพิวเตอร์ของคุณและสร้างความแตกต่างได้

ฉันแน่ใจว่าคำตอบอื่น ๆ จะลงรายละเอียดและผลประโยชน์มากกว่าฉัน

ในแง่ของการตรวจจับความแตกต่างจากนั้นโดยทางโปรแกรมคุณเพียงแค่ตรวจสอบขนาดของตัวชี้ (เช่น sizeof (void *)) คำตอบของ 4 หมายถึง 32 บิตและ 8 หมายความว่าคุณกำลังทำงานในสภาพแวดล้อม 64 บิต


4
หากคุณเขียนโปรแกรมที่สมมติว่าตัวชี้บางประเภทมีขนาดเดียวกับชนิดอินทิกรัลบางประเภทให้ทำตามนั้น นี่เป็นเรื่องจริงมาเป็นเวลานาน
David Thornley

@ David: คุณพูดถูก โชคไม่ดีที่มีโค้ดจำนวนมากออกมาทำสิ่งนั้น

10

กระบวนการ 32 บิตมีพื้นที่ที่อยู่เสมือน 4 GB นี่อาจจะน้อยเกินไปสำหรับบางแอพ แอป 64 บิตมีพื้นที่ที่อยู่ไม่ จำกัด อย่างแท้จริง (แน่นอนว่ามี จำกัด แต่คุณมักจะไม่ถึงขีด จำกัด นี้)

บน OSX มีข้อดีอื่น ๆ ดูบทความต่อไปนี้เหตุใดเคอร์เนลจึงทำงานในพื้นที่ที่อยู่ 64 บิต (ไม่ว่าแอปของคุณจะทำงานที่ 64 หรือ 32) หรือให้แอปของคุณทำงานในพื้นที่ที่อยู่ 64 บิต (ในขณะที่เคอร์เนลยังคงเป็น 32 บิต) ในการสรุป: หากมี 64 บิต (เคอร์เนลหรือแอปหรือทั้งสองอย่าง) TLB ("translation lookaside buffer") ไม่จำเป็นต้องล้างข้อมูลเมื่อใดก็ตามที่คุณสลับจากเคอร์เนลเพื่อใช้พื้นที่และด้านหลัง (ซึ่งจะเพิ่มความเร็ว การเข้าถึง RAM)

นอกจากนี้คุณจะได้รับประสิทธิภาพเมื่อทำงานกับตัวแปร "long long int" (ตัวแปร 64 บิตเช่น uint64_t) CPU แบบ 32 บิตสามารถเพิ่ม / หาร / ลบ / คูณค่า 64 บิตสองค่า แต่ไม่สามารถใช้งานในการทำงานของฮาร์ดแวร์เดียวได้ แต่ต้องแยกการดำเนินการนี้ออกเป็นสองการดำเนินงาน 32 บิตขึ้นไป ดังนั้นแอปที่ใช้งานได้มากกับหมายเลข 64 บิตจะได้รับความเร็วในการทำคณิตศาสตร์ 64 บิตโดยตรงในฮาร์ดแวร์

สุดท้าย แต่ไม่ท้ายสุดสถาปัตยกรรม x86-64 มีการลงทะเบียนมากกว่าสถาปัตยกรรม x86 แบบคลาสสิก การทำงานกับรีจิสเตอร์นั้นเร็วกว่าการทำงานกับแรมและยิ่งซีพียูลงทะเบียนมากเท่าไหร่ก็ยิ่งจำเป็นต้องสลับค่ารีจิสเตอร์เป็นแรมและกลับไปรีจิสเตอร์บ่อยขึ้น

หากต้องการทราบว่า CPU ของคุณสามารถทำงานในโหมด 64 บิตหรือไม่คุณสามารถดูตัวแปร sysctl ต่างๆ เช่นเปิดเทอร์มินัลแล้วพิมพ์

sysctl machdep.cpu.extfeatures

หากมีรายการ EM64T CPU ของคุณจะรองรับพื้นที่ที่อยู่ 64 บิตตามมาตรฐาน x86-64 คุณยังสามารถมองหา

sysctl hw.optional.x86_64

ถ้ามันบอกว่า 1 (จริง / เปิดใช้งาน), CPU ของคุณรองรับโหมด x86-64 บิตถ้ามันบอกว่า 0 (เท็จ / ปิดการใช้งาน) ก็ไม่ได้ หากไม่พบการตั้งค่าเลยให้ถือว่าการตั้งค่านั้นเป็นเท็จ

หมายเหตุ: คุณยังสามารถดึงข้อมูลตัวแปร sysctl จากภายในแอป native C โดยไม่จำเป็นต้องใช้เครื่องมือบรรทัดคำสั่ง ดู

man 3 sysctl

ข้อผิดพลาด: "machdep.cpu.extfeatures" เป็นกุญแจสำคัญที่ไม่รู้จัก

ฉันคิดว่ามันไม่ได้เรียกว่า EM64T เช่นกันถ้าคุณโชคไม่ดีพอที่จะมีสติปัญญา

9

โปรดทราบว่า addressspace สามารถใช้สำหรับหน่วยความจำมากกว่า (จริง) หนึ่งสามารถหน่วยความจำแมปไฟล์ขนาดใหญ่ซึ่งสามารถปรับปรุงประสิทธิภาพในรูปแบบการเข้าถึงที่แปลกมากขึ้นเพราะแคชระดับ VM บล็อกที่มีประสิทธิภาพและมีประสิทธิภาพยิ่งขึ้นเตะมันยังปลอดภัยในการจัดสรรบล็อกหน่วยความจำขนาดใหญ่ใน 64 บิตตั้งแต่ heapmanager น้อย มีแนวโน้มที่จะพบการกระจายตัวของพื้นที่ที่อยู่ที่จะไม่อนุญาตให้จัดสรรบล็อกขนาดใหญ่

บางสิ่งที่กล่าวไว้ในหัวข้อนี้ (เช่นการเพิ่มจำนวนของการลงทะเบียน #) ใช้เฉพาะกับ x86-> x86_64 ไม่ใช่ 64- บิตโดยทั่วไป เช่นเดียวกับข้อเท็จจริงที่ว่าภายใต้ x86_64 มีการรับประกันว่ามี SSE2, 686 opcodes และวิธีที่ถูกในการทำ PIC คุณสมบัติเหล่านี้ไม่ได้มีความเข้มงวดกับ 64 บิต แต่เป็นข้อ จำกัด ด้านมรดกที่รู้จักและการแก้ไขข้อ จำกัด x86

ยิ่งไปกว่านั้นบ่อยครั้งที่ผู้คนชี้ไปที่การลงทะเบียนเป็นสองเท่าเป็นสาเหตุของการเร่งความเร็วในขณะที่มีโอกาสมากขึ้นที่การใช้ SSE2 ที่เป็นค่าเริ่มต้นนั้นจะเป็นการหลอกลวง (เร่ง memcpy และฟังก์ชันที่คล้ายกัน) หากคุณเปิดใช้งานชุดเดียวกันสำหรับ x86 ความแตกต่างจะเล็กลง (*) (***)

นอกจากนี้โปรดทราบว่ามักมีบทลงโทษเริ่มต้นที่เกี่ยวข้องเนื่องจากโครงสร้างข้อมูลเฉลี่ยจะเพิ่มขึ้นเพียงเพราะขนาดของตัวชี้ใหญ่กว่า สิ่งนี้มีเอฟเฟ็กต์แคชด้วย แต่สิ่งที่สังเกตเห็นได้ชัดเจนกว่าในความจริงที่ว่า memcpy เฉลี่ย () (หรืออะไรก็ตามที่เทียบเท่ากับการคัดลอกหน่วยความจำในภาษาของคุณ) จะใช้เวลานานกว่า นี่เป็นเพียงขนาดไม่กี่เปอร์เซ็นต์ btw แต่ speedups ที่ระบุไว้ข้างต้นก็มีขนาดเท่ากัน

โดยปกติการจัดตำแหน่งค่าโสหุ้ยยังใหญ่กว่าในสถาปัตยกรรม 64- บิต (บันทึกก่อนหน้านี้ 32- บิตเท่านั้นมักจะกลายเป็นการรวมกันของค่า 32- บิตและ 64- บิต), ทำให้โครงสร้างยิ่งขึ้น

โดยรวมแล้วการทดสอบอย่างง่ายของฉันระบุว่าพวกเขาจะยกเลิกซึ่งกันและกันโดยประมาณถ้าไดรเวอร์และไลบรารีรันไทม์ได้รับการปรับแต่งอย่างสมบูรณ์โดยไม่มีความแตกต่างด้านความเร็วสำหรับแอพเฉลี่ย อย่างไรก็ตามแอพพลิเคชั่นบางตัวสามารถทำงานได้เร็วขึ้น (เช่นขึ้นอยู่กับ AES) หรือช้ากว่า (โครงสร้างข้อมูลที่สำคัญจะถูกย้ายไปรอบ ๆ / สแกน / เดินและมีตัวชี้มากมาย) แม้ว่าการทดสอบอยู่บน Windows และดังนั้นการปรับให้เหมาะสมของ PIC ไม่ได้เป็นมาตรฐาน

โปรดทราบว่าภาษา JIT-VM ส่วนใหญ่ (Java, .NET) ใช้ตัวชี้โดยเฉลี่ย (ภายใน) มากกว่า C ++ อย่างมีนัยสำคัญ อาจใช้หน่วยความจำของพวกเขาเพิ่มขึ้นมากกว่าโปรแกรมเฉลี่ย แต่ฉันไม่กล้าที่จะถือเอาว่าโดยตรงกับการชะลอตัวผลกระทบ (เนื่องจากเหล่านี้เป็นสัตว์ที่ซับซ้อนและขี้ขลาดจริง ๆ และมักจะยากที่จะทำนายโดยไม่ต้องวัด)

ค่าเริ่มต้นของ Windows 64 บิตเพื่อใช้ SSE2 สำหรับจุดลอยตัวซึ่งดูเหมือนว่าจะเพิ่มความเร็วในการดำเนินการอย่างง่ายและชะลอการดำเนินการที่ซับซ้อน (sin, cos ฯลฯ )

(*) ความจริงที่รู้จักกันน้อยคือจำนวนของการลงทะเบียน SSE ยังเพิ่มเป็นสองเท่าในโหมด 64 บิต

(**) ดร. ดอบส์มีบทความที่ดีเกี่ยวกับเรื่องนี้ไม่กี่ปีที่ผ่านมา


8

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

ลองดูที่ Volume 4, Pre-Fascicle 1A เพื่อดูตัวอย่างของเทคนิคเด็ด ๆ ที่ฉันกำลังพูดถึง


7

นอกเหนือจากความสามารถในการจัดการกับหน่วยความจำที่มากขึ้น x86_64 ยังมีการลงทะเบียนมากขึ้นทำให้คอมไพเลอร์สามารถสร้างโค้ดที่มีประสิทธิภาพมากขึ้น การปรับปรุงประสิทธิภาพมักจะมีขนาดค่อนข้างเล็ก

สถาปัตยกรรม x86_64 นั้นเข้ากันได้กับ x86 เป็นไปได้ที่จะเรียกใช้ระบบปฏิบัติการ 32 บิตที่ไม่ได้แก้ไข นอกจากนี้ยังสามารถเรียกใช้ซอฟต์แวร์ 32 บิตที่ไม่ได้แก้ไขจากระบบปฏิบัติการ 64 บิต ซึ่งจะต้องใช้ไลบรารี 32- บิตตามปกติทั้งหมด อาจต้องติดตั้งแยกต่างหาก


การลงทะเบียนมากขึ้นและ ABI ที่ออกแบบใหม่ (ฟังก์ชั่นการส่งผ่านในการลงทะเบียน) มักจะเป็นความเร็ว 10 ถึง 15% ซึ่งค่อนข้างดี ขณะนี้มี x32 Linux ABI พร้อมตัวชี้ 32 บิต แต่ใช้โหมดยาว amd64 และ args-in-register การประชุมที่เรียก ดังนั้นคุณจะได้รับประโยชน์ความเร็วทั้งหมดของ amd64 แต่ไม่มีค่าใช้จ่ายที่จำเป็นต้องใช้ 64 บิตสำหรับตัวชี้ทุกตัว เหมาะสำหรับทุกสิ่งที่ไม่ต้องการหน่วยความจำ 4GB (เสมือน)
Peter Cordes

6

เธรดนี้ยาวเกินไปแล้ว แต่ ...

คำตอบส่วนใหญ่มุ่งเน้นไปที่ข้อเท็จจริงที่ว่าคุณมีพื้นที่ที่อยู่ 64- บิตที่ใหญ่กว่าดังนั้นคุณจึงสามารถจัดการกับหน่วยความจำได้มากขึ้น ประมาณ 99% ของการใช้งานทั้งหมดนี้ไม่เกี่ยวข้องทั้งหมด เสียงโห่ใหญ่

จริงเหตุผล 64 บิตเป็นสิ่งที่ดีคือไม่ได้ว่าการลงทะเบียนมีขนาดใหญ่ แต่มีครั้งที่สองเป็นจำนวนมากของพวกเขา! นั่นหมายความว่าคอมไพเลอร์สามารถเก็บค่าของคุณได้มากขึ้นในการลงทะเบียนแทนที่จะส่งพวกเขาไปยังหน่วยความจำและโหลดพวกเขากลับมาในไม่กี่คำแนะนำในภายหลัง ถ้าและเมื่อคอมไพเลอร์ที่ปรับให้เหมาะสมเพิ่มกำลังเปิดลูปของคุณให้คุณมันสามารถคลี่มันออกได้สองเท่าซึ่งจะช่วยให้ประสิทธิภาพดีขึ้น

นอกจากนี้ยังมีการกำหนดรูทีนย่อย caller / callee สำหรับ 64- บิตเพื่อกำหนดให้พารามิเตอร์ส่วนใหญ่ผ่านการลงทะเบียนแทนการเรียกผู้เรียกเข้าสู่สแต็กและ callee จะปรากฏขึ้น

ดังนั้นแอปพลิเคชัน "ทั่วไป" C / C ++ จะได้รับการปรับปรุงประสิทธิภาพประมาณ 10% หรือ 15% เพียงแค่ทำการคอมไพล์ใหม่สำหรับ 64 บิต (สมมติว่าบางส่วนของแอพคำนวณถูกผูกไว้แน่นอนว่านี่ไม่ใช่ guarenteed คอมพิวเตอร์ทุกเครื่องจะรอด้วยความเร็วเท่ากันระยะทางของคุณอาจแตกต่างกัน)


ในขณะที่ชุดคำสั่งนั้นดีกว่าสำหรับ x64 มากกว่า x86 ซึ่งโดยทั่วไปจะไม่สำคัญ รหัส 64 บิตอาจช้ากว่า 32 บิตได้เช่นกันเนื่องจากคำแนะนำอาจใหญ่กว่าดังนั้นจึงมีขนาดที่พอดีกับแคชน้อยกว่า (การคลายลูป BTW เป็นเทคนิคที่น่าสงสัยในทุกวันนี้เนื่องจากมันจะเพิ่มจำนวนแคชที่หายไป) ที่ฉันทำงานเราต้องใช้ 64 บิตสำหรับการเพิ่มที่อยู่หน่วยความจำ
David Thornley

เดวิดชุดคำสั่ง x64 และ x86 เกือบจะเหมือนกันยกเว้นขนาดตัวถูกดำเนินการและคำนำหน้าการลงทะเบียนบางส่วน ด้วย IA64, aka Itanium aka Itanic, รหัส 64 บิตโดยทั่วไปจะเป็นรหัส x86 3 เท่าและเน้นที่แคชคำสั่งตามที่คุณพูด นั่นเป็นปัจจัยสำคัญที่ทำให้สถาปัตยกรรมนั้นล้มเหลวอย่างน่าสังเวช แต่ด้วย x86 หรือที่รู้จักกันว่า AMD64 หรือ EM64T นั้นการเติบโตของรหัสนั้นโดยปกติจะมีเพียง 10-20%

แม้ว่า x 64 ทำให้การลงทะเบียนเพิ่มเติมแอดเดรสฉันไม่แน่ใจว่าเท่าไหร่ก็จริงเพิ่มจำนวนของการลงทะเบียนทางกายภาพที่มีอยู่ - ทั้งหมดประมวลผล x86 ที่ผ่านมามีจำนวนมาก (> 100) "เงา" ลงทะเบียนและใช้ "ลงทะเบียนเปลี่ยนชื่อ" + การดำเนินการเก็งกำไร เพื่ออนุญาตให้โค้ดพา ธ อิสระรันในแบบขนานกับระดับ ผลถ้าเส้นทางรหัสอิสระกำลังดำเนินการ n ครั้งเท่าที่มีการลงทะเบียนจำนวนมาก (จนกว่าการลงทะเบียนเงาหมด)

@j_random_hacker คุณถูกต้องอย่างแน่นอนว่าเทคนิคเหล่านั้นเกิดขึ้นภายใต้สถาปัตยกรรม แต่ไม่ว่าจะมี shadow register จำนวนเท่าใดที่มีอยู่หากโปรแกรมต้องการทำงานกับไอเท็มข้อมูลมากกว่า 8 รายการและมีรีจิสเตอร์เพียง 8 รีจิสเตอร์ในชุดคำสั่งคอมไพเลอร์ต้องสร้างคำสั่ง store / reload ดังนั้นใช่ X64 ทำให้การลงทะเบียนมากเป็นสองเท่า "พร้อมใช้"

ประสบการณ์ของฉันคือว่ามันน้อยลงและชดเชยด้วยความจริงที่ว่า memg avg ที่จะย้ายมีขนาดใหญ่ขึ้น
Marco van de Voort

6

นอกเหนือจากข้อได้เปรียบที่กล่าวมาแล้วนี่คือความปลอดภัยอีกมาก:

  • x86_64 cpus มีบิตที่ไม่เรียกทำงานในตารางหน้า เช่นนี้สามารถป้องกันการแสวงหาประโยชน์ความลับเกิดจากบัฟเฟอร์ overruns x86 cpus ขนาด 32 บิตรองรับเฉพาะคุณสมบัตินี้ในโหมด PAE เท่านั้น
  • พื้นที่ที่อยู่ที่ใหญ่กว่าช่วยให้การสุ่มตัวอย่างเค้าโครงพื้นที่ที่อยู่ (ASLR) ดีขึ้นซึ่งทำให้การใช้ประโยชน์จากบัฟเฟอร์มากเกินความจำเป็น
  • x86_64 cpus รหัสตำแหน่งที่เป็นอิสระเช่นการเข้าถึงข้อมูลที่สัมพันธ์กับการลงทะเบียนตัวชี้คำสั่ง (RIP)

ข้อดีอีกอย่างที่ควรคำนึงถึงคือปริมาณของหน่วยความจำเสมือนที่ต่อเนื่องกันที่จัดสรรด้วยvmalloc()ในเคอร์เนล Linux สามารถใหญ่กว่าในโหมด 64 บิต


5

ด้วยเครื่อง 32- บิตคุณมีหน่วยความจำเหลือเพียง 4,294,967,295 ไบต์เท่านั้น ด้วยเครื่อง 64 บิตคุณมีหน่วยความจำ 1.84467441 × 10 ^ 19 ไบต์

Wikipedia กล่าวสิ่งนี้

ตัวประมวลผล 64 บิตคำนวณงานเฉพาะ (เช่นแฟคทอเรียลของตัวเลขขนาดใหญ่) สองเท่าเร็วเท่าที่ทำงานในสภาพแวดล้อม 32 บิต (ตัวอย่างที่กำหนดมาจากการเปรียบเทียบระหว่างเครื่องคำนวณ Windows 32 บิตและ 64 บิตสังเกตได้จากปัจจัย 100000 ) สิ่งนี้ให้ความรู้สึกทั่วไปเกี่ยวกับความเป็นไปได้ทางทฤษฎีของแอ็พพลิเคชันที่ได้รับการปรับปรุง 64- บิต

ในขณะที่สถาปัตยกรรม 64 บิตทำให้การทำงานกับชุดข้อมูลขนาดใหญ่ในแอปพลิเคชั่นเช่นวิดีโอดิจิทัลการคำนวณทางวิทยาศาสตร์และฐานข้อมูลขนาดใหญ่ง่ายขึ้น แต่ก็มีการถกเถียงกันอย่างมากว่าพวกเขาหรือโหมดความเข้ากันได้แบบ 32 บิตนั้นจะเร็วกว่า ระบบ 32 บิตสำหรับงานอื่น ๆ ในสถาปัตยกรรม x86-64 (AMD64) ระบบปฏิบัติการและแอพพลิเคชั่นส่วนใหญ่แบบ 32 บิตสามารถทำงานได้อย่างราบรื่นบนฮาร์ดแวร์ 64 บิต

เครื่องเสมือน Java แบบ 64 บิตของ Sun นั้นเริ่มทำงานช้ากว่าเครื่องเสมือนแบบ 32 บิตเนื่องจาก Sun ได้นำ JIT compiler (C2) ไปใช้กับเซิร์ฟเวอร์ 64 บิตสำหรับแพลตฟอร์ม 64 บิต [9] คอมไพเลอร์ "ไคลเอนต์" JIT (C1) ซึ่งสร้างโค้ดที่มีประสิทธิภาพน้อยลง แต่คอมไพล์เร็วกว่านั้นไม่สามารถใช้งานได้บนแพลตฟอร์ม 64 บิต

ควรสังเกตว่าความเร็วไม่ใช่ปัจจัยเดียวที่ต้องพิจารณาในการเปรียบเทียบโปรเซสเซอร์ 32- บิตและ 64- บิต แอปพลิเคชันเช่นมัลติทาสกิ้งการทดสอบความเครียดและการจัดกลุ่ม (สำหรับการคำนวณประสิทธิภาพสูง), HPC อาจเหมาะกับสถาปัตยกรรม 64 บิตมากขึ้นเนื่องจากการปรับใช้ที่ถูกต้อง คลัสเตอร์ 64- บิตได้รับการปรับใช้อย่างกว้างขวางในองค์กรขนาดใหญ่เช่น IBM, HP และ Microsoft ด้วยเหตุนี้


2
ความยาวบัสแอดเดรสทางกายภาพไม่ขึ้นกับว่าเป็นโปรเซสเซอร์ 32 หรือ 64 บิต โปรเซสเซอร์ 32 บิตบางตัวมีแอดเดรสบัสที่ใหญ่กว่า 32 บิตและไม่มีโปรเซสเซอร์ 64 บิตที่มีแอดเดรสบัส 64- บิต

1
ตกลง ในทางทฤษฎีพื้นที่ที่อยู่คือ 2 ^ 64 ในทางปฏิบัติผู้ผลิตซีพียูใช้ค่าที่น้อยลง ... เช่น 2 ^ 40 หรือ 2 ^ 48
Stu Thompson

5

ใบเสนอราคาจาก Microsoft.com:

ในตารางต่อไปนี้ทรัพยากรสูงสุดที่เพิ่มขึ้นของคอมพิวเตอร์ที่ใช้ Windows รุ่น 64 บิตและตัวประมวลผล Intel 64 บิตเปรียบเทียบกับทรัพยากรสูงสุด 32 บิตที่มีอยู่

MS-ตาราง


2
น่าสนใจ แต่ก็น่าสังเกตว่า Windows รุ่น 32 บิตบางรุ่นมีหน่วยความจำกายภาพเพิ่มขึ้น ดูตัวอย่างen.wikipedia.org/wiki/…
ChrisInEdmonton

@ChrisInEdmonton ระบบรองรับมากกว่า 4GB หรือหน่วยความจำ แต่ที่อยู่สำหรับแต่ละกระบวนการยังคง จำกัด อยู่ที่ 2GB (3GB โดยมีที่อยู่ขนาดใหญ่ทราบ) ดังนั้นแม้ว่าระบบของคุณจะมีหน่วยความจำจำนวนมาก แต่ก็ยังไม่ช่วยให้โปรแกรมที่มีหน่วยความจำกว้างขวางและประสิทธิภาพยังคงล้าหลังรุ่น 64 บิต นอกจากนี้ก็มีช่วงที่อยู่มีขนาดเล็กมากสำหรับ ASLR และหน่วยความจำที่แมปไฟล์
phuclv

4

Kristof และ Poshi ได้ระบุความแตกต่างทางเทคนิคหลักระหว่าง 32 และ 64 บิต OS 'ประสบการณ์การใช้งานของผู้ใช้มักจะแตกต่างจากทฤษฎีมาก Windows เวอร์ชัน 64 บิตสำหรับผู้บริโภคจนถึงปัจจุบัน (XP และ Vista) มีช่องโหว่ขนาดใหญ่ในการรองรับไดรเวอร์ ฉันมีเครื่องพิมพ์สแกนเนอร์และอุปกรณ์ภายนอกอื่น ๆ จำนวนมากที่แบนไม่ทำงานกับรุ่น 64 บิตที่ทำงานได้ดีกับรุ่น 32 บิต อุปกรณ์เหล่านี้มีไดรเวอร์ 64 บิตและยังคงใช้งานไม่ได้ ณ จุดนี้ฉันขอแนะนำให้คุณหลีกเลี่ยงสิ่งที่ผู้บริโภคใช้ซึ่งเป็น 64 บิตจาก Microsoft จนกว่าคุณจะได้ยินว่า Windows 7 จัดการเรื่องนี้อย่างไรจากผู้ใช้งานจริงไม่ใช่แค่ uber-geeks ที่ปัจจุบันมีการเข้าถึง ให้เวลาอย่างน้อย 6 เดือนและดูว่าผู้คนกำลังประสบกับอะไร


อาจมีไดรเวอร์น้อยลง แต่ก็ไม่ได้แย่เท่าที่ควร ฉันใช้ 64 บิตมาตั้งแต่ปี 2550 และไม่เคยมีปัญหาใด ๆ เลย ต้องบอกว่าฉันไม่ได้เชื่อมต่ออุปกรณ์ที่คลุมเครือหรือโบราณ
RomanSt

1
เครื่องพิมพ์ล่าสุดที่ใช้ Vista 64 บิตเป็นเครื่องพิมพ์มัลติฟังก์ชั่น HP รุ่นใหม่ล่าสุดเมื่อเดือนที่แล้วในระบบ Dell อายุ 2 เดือน ทั้ง Dell และ HP ยอมแพ้และลูกค้าของฉันจ่ายเงินให้ฉันเพื่อใช้ XP Pro และกำจัด Vista ไม่มีอะไรคลุมเครือเกี่ยวกับทั้งสองหน่วย
Kevin K

1
โดยทั่วไปหากคุณซื้อคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ 64 บิตทุกอย่างจะทำงานได้ ฉันต้องระวังก่อนที่จะพยายามอัปเดตคอมพิวเตอร์เก่าหรือถ้าฉันมีเครื่องพิมพ์รุ่นเก่าหรือถ้าฉันชอบอัพเกรดด้วยตัวเอง
David Thornley

ฮาร์ดแวร์ที่ต้องการสร้างแบรนด์ทำงานร่วมกับ Windowsหรือรับรองให้ใช้กับโลโก้Windows ต้องมีไดรเวอร์ 64 บิต อาจจะมองหาในครั้งต่อไปที่ แต่แน่นอนว่าบางครั้งผู้ขายก็ไม่สนใจฮาร์ดแวร์สำหรับผู้บริโภคเนื่องจากผู้บริโภคส่วนใหญ่จะยังคงใช้งานแบบ 32 บิตอยู่
Joey

2

บางโปรแกรมเกมการเล่นใช้บิตคณะกรรมการตัวแทน ยกตัวอย่างเช่นหมากรุกหมากฮอสและโอเทลโลมีบอร์ดขนาด 8x8 คือ 64 สี่เหลี่ยมดังนั้นอย่างน้อย 64 บิตในหนึ่งคำของเครื่องจักรจะช่วยให้ประสิทธิภาพดีขึ้น

ฉันจำได้ว่าเคยอ่านเกี่ยวกับโปรแกรมหมากรุกที่มี 64- บิตบิวด์นั้นเร็วกว่ารุ่น 32 บิตเกือบสองเท่า


2

คำว่า 32- บิตและ 64- บิตอ้างอิงถึงวิธีที่โปรเซสเซอร์คอมพิวเตอร์ (หรือที่เรียกว่า CPU) จัดการข้อมูล Windows รุ่น 64 บิตจัดการหน่วยความจำเข้าถึงโดยสุ่ม (RAM) จำนวนมากได้อย่างมีประสิทธิภาพมากกว่าระบบ 32 บิต

ความเร็วอาจแตกต่างกันในความคิดของฉัน


1

อีกประเด็นหนึ่งที่เกี่ยวกับ Microsoft Windows คือหลายปีที่ผ่านมามี Win32 API ซึ่งมีไว้สำหรับระบบปฏิบัติการ 32 บิตและไม่ได้รับการปรับให้เหมาะสมสำหรับการรวบรวม 64 บิต เมื่อฉันเขียน DLLs สำหรับแอปพลิเคชันของฉันฉันมักจะคอมไพล์ใน Win32 ซึ่งไม่ใช่รุ่น 64 บิต ก่อนหน้า Vista มี Windows 64 บิตที่ไม่ประสบความสำเร็จหลายอย่างฉันเชื่อว่าที่ที่ฉันทำงานเครื่องใหม่ของฉันมี RAM 4 GB แต่ฉันยังคงใช้ Windows XP Pro 32 บิตเนื่องจากเป็น O / เสถียรที่รู้จักกัน S ที่เกี่ยวข้องกับ XP64 หรือ Vista

ฉันคิดว่าคุณอาจต้องการที่จะมองย้อนกลับไปเมื่อมีการเปลี่ยนจาก 16 บิตเป็น 32 บิตสำหรับรายละเอียดเพิ่มเติมว่าทำไมการเปลี่ยนแปลงอาจเป็นเรื่องใหญ่สำหรับบางคน แอปพลิเคชันที่มีความสำคัญต่อภารกิจที่ บริษัท อาจใช้งานบนเดสก์ท็อปเช่นแพ็คเกจการบัญชีขนาดเล็กอาจไม่ทำงานบนระบบปฏิบัติการ 64 บิตดังนั้นจึงมีความจำเป็นที่จะต้องรักษาเครื่องรุ่นเก่าให้เป็นเสมือนจริงหรือของจริง

การเปลี่ยนขนาดของที่อยู่สามารถมีผลกระทบใหญ่และผลกระทบบางอย่าง


1

เพื่อจุดประสงค์ในทางปฏิบัติคุณอาจไม่สังเกตเห็นความแตกต่าง

คุณต้องมี CPU 64 บิต (CPU ส่วนใหญ่ในไม่กี่ปีที่ผ่านมา) เพื่อติดตั้งระบบปฏิบัติการ 64 บิต

ข้อดีบางประการของระบบปฏิบัติการ 64 บิต:

  • จะช่วยให้คุณเรียกใช้ RAM มากกว่า 4GB (จำนวนสูงสุดที่คุณสามารถระบุได้ในระบบปฏิบัติการ 32 บิตคือ 2 ^ 32 = 4GB)
  • เป็นประโยชน์สำหรับการทำงานกับชุดข้อมูลขนาดใหญ่ (เช่นใน Excel) และงานที่ต้องใช้การคำนวณบางอย่าง (เช่น Photoshop และไฟล์ขนาดใหญ่)
  • คุณสามารถเรียกใช้โปรแกรม 64 บิตบนระบบปฏิบัติการ 64 บิตได้ แต่คุณสามารถเรียกใช้โปรแกรม 32 บิตได้ทั้งสองโปรแกรม (โปรดจำไว้ว่ามีหลายโปรแกรมที่เข้ามาเป็นทั้งสองแบบดังนั้นจึงไม่มี 64- บิตเท่านั้น โปรแกรม)

ภายใต้สถานการณ์ส่วนใหญ่โปรแกรม 64 บิตใช้หน่วยความจำเพิ่มขึ้นเล็กน้อย แต่สำหรับคอมพิวเตอร์ส่วนบุคคลโดยทั่วไปจะไม่สังเกตเห็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.