ระบบ 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.