ความแตกต่างระหว่างระบบ 32- บิตและ 64- บิตคืออะไร?
หากคุณใช้ทั้งสองอย่างคุณมีความแตกต่างอะไรมาก
เป็นปัญหาหรือไม่ที่จะใช้โปรแกรม 32- บิตกับระบบ 64- บิตในบางกรณี?
ความแตกต่างระหว่างระบบ 32- บิตและ 64- บิตคืออะไร?
หากคุณใช้ทั้งสองอย่างคุณมีความแตกต่างอะไรมาก
เป็นปัญหาหรือไม่ที่จะใช้โปรแกรม 32- บิตกับระบบ 64- บิตในบางกรณี?
คำตอบ:
หมายเหตุ: คำตอบเหล่านี้นำไปใช้กับพีซีซีพียูที่ใช้ 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) และขนาดแคชของสาย
โดยทั่วไปคุณสามารถทำทุกอย่างให้ใหญ่ขึ้นได้:
สถาปัตยกรรม 64 บิตขนาดใหญ่ 2 ประเภทคือสถาปัตยกรรม x64 และ IA64 แต่ x64 เป็นที่นิยมมากที่สุด
x64 สามารถเรียกใช้คำสั่ง x86 ได้เช่นเดียวกับคำสั่ง x64 IA64 รันคำสั่ง x86 เช่นกัน แต่ไม่ได้ใช้ส่วนขยาย SSE มีฮาร์ดแวร์เฉพาะสำหรับ Itanium สำหรับการรันคำสั่ง x86 มันเป็นตัวเลียนแบบ แต่ในฮาร์ดแวร์
ในฐานะที่เป็น @Phil พูดถึงคุณสามารถได้รับการมองลึกของวิธีการทำงานที่นี่
ผลกระทบที่ใหญ่ที่สุดที่ผู้คนจะสังเกตเห็นในขณะนี้คือพีซีแบบ 32 บิตสามารถจัดการหน่วยความจำได้สูงสุด 4GB เท่านั้น เมื่อคุณถอดหน่วยความจำที่จัดสรรสำหรับการใช้งานอื่น ๆ โดยระบบปฏิบัติการพีซีของคุณอาจแสดงหน่วยความจำที่ใช้งานได้ประมาณ 3.25GB เท่านั้น เลื่อนไปที่ 64 บิตและขีด จำกัด นี้จะหายไป
หากคุณกำลังพัฒนาอย่างจริงจังสิ่งนี้อาจสำคัญมาก ลองใช้เครื่องเสมือนหลายเครื่องและคุณใช้หน่วยความจำไม่เพียงพอ เซิร์ฟเวอร์มีแนวโน้มที่จะต้องการหน่วยความจำเพิ่มเติมดังนั้นคุณจะพบว่าการใช้ 64 บิตนั้นดีกว่าบนเซิร์ฟเวอร์มากกว่าบนเดสก์ท็อป กฎของมัวร์ทำให้มั่นใจได้ว่าเราจะมีหน่วยความจำเพิ่มมากขึ้นในเครื่องและในบางจุดเดสก์ท็อปก็จะเปลี่ยนเป็น 64 บิตเป็นมาตรฐาน
สำหรับรายละเอียดอื่น ๆ อีกมากมายของความแตกต่างของตัวประมวลผลตรวจสอบบทความที่ยอดเยี่ยมนี้จากArsTechnica
ไม่มีอะไรฟรี: แม้ว่าแอพพลิเคชั่น 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
ระบบปฏิบัติการ 64 บิตสามารถใช้ RAM ได้มากกว่านี้ ในทางปฏิบัติแล้ว 64-bit Vista / 7 ใช้คุณลักษณะด้านความปลอดภัยที่น่าพิศวงมากขึ้นสำหรับสถานที่ที่พวกเขาวางองค์ประกอบสำคัญใน RAM แต่นั่นไม่ใช่ 'น่าสังเกต' เช่นนั้น
จาก ChrisInEdmonton:
ระบบปฏิบัติการ 32 บิตบนระบบ ix86 ที่มี PAE สามารถระบุ RAM ได้สูงสุด 64 GB ระบบปฏิบัติการ 64 บิตบน x86-64 สามารถเข้าถึงพื้นที่ที่อยู่เสมือนได้ถึง 256 TB ถึงแม้ว่าสิ่งนี้อาจได้รับการเพิ่มในตัวประมวลผลที่ตามมาสูงถึง 16 EB โปรดทราบว่าระบบปฏิบัติการบางระบบจะ จำกัด พื้นที่ที่อยู่เพิ่มเติมและเมนบอร์ดส่วนใหญ่จะมีข้อ จำกัด เพิ่มเติม
ไม่แน่ใจว่าฉันสามารถตอบคำถามทั้งหมดของคุณได้โดยไม่ต้องเขียนเรียงความทั้งหมด (มี Google อยู่เสมอ ... ) แต่คุณไม่จำเป็นต้องออกแบบแอพของคุณต่างไปสำหรับ 64 บิต ฉันเดาว่าสิ่งที่ถูกอ้างถึงคือคุณต้องคำนึงถึงสิ่งต่าง ๆ เช่นขนาดตัวชี้ไม่ใช่ขนาดเดียวกันกับ ints อีกต่อไป และคุณมีปัญหามากมายที่อาจเกิดขึ้นได้ด้วยสมมติฐานแบบ inbuilt กับข้อมูลบางประเภทซึ่งมีความยาวสี่ไบต์ซึ่งอาจไม่เป็นจริงอีกต่อไป
สิ่งนี้มีความเป็นไปได้ที่จะรวบรวมข้อมูลทุกชนิดในแอปพลิเคชันของคุณ - ทุกอย่างตั้งแต่การบันทึก / โหลดจากไฟล์การวนซ้ำข้อมูลการจัดแนวข้อมูลจนถึงการดำเนินการข้อมูลระดับบิต หากคุณมี codebase อยู่แล้วที่คุณพยายามพอร์ตหรือทำงานทั้งสองอย่างอาจเป็นไปได้ว่าคุณจะมี niggles เล็ก ๆ น้อย ๆ จำนวนมากในการทำงาน
ฉันคิดว่านี่เป็นปัญหาการใช้งานมากกว่าที่จะออกแบบ นั่นคือฉันคิดว่า "การออกแบบ" ของการพูดแพคเกจการแก้ไขภาพจะเหมือนกันทุกอย่างที่คำพูด เราเขียนโค้ดที่คอมไพล์ทั้งรุ่น 32 บิตและ 64 บิตและการออกแบบไม่ได้แตกต่างกันอย่างสิ้นเชิงระหว่างสอง - มันเป็นรหัสฐานเดียวกัน
พื้นฐาน "เรื่องใหญ่" บน 64 บิตคือคุณสามารถเข้าถึงพื้นที่ที่อยู่หน่วยความจำขนาดใหญ่กว่า 32 บิต ซึ่งหมายความว่าคุณสามารถโยนหน่วยความจำมากกว่า 4Gb ลงในคอมพิวเตอร์ของคุณและสร้างความแตกต่างได้
ฉันแน่ใจว่าคำตอบอื่น ๆ จะลงรายละเอียดและผลประโยชน์มากกว่าฉัน
ในแง่ของการตรวจจับความแตกต่างจากนั้นโดยทางโปรแกรมคุณเพียงแค่ตรวจสอบขนาดของตัวชี้ (เช่น sizeof (void *)) คำตอบของ 4 หมายถึง 32 บิตและ 8 หมายความว่าคุณกำลังทำงานในสภาพแวดล้อม 64 บิต
กระบวนการ 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
โปรดทราบว่า 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 บิต
(**) ดร. ดอบส์มีบทความที่ดีเกี่ยวกับเรื่องนี้ไม่กี่ปีที่ผ่านมา
นอกเหนือจากปัญหาพื้นที่หน่วยความจำที่เห็นได้ชัดที่คนส่วนใหญ่พูดถึงที่นี่ฉันคิดว่ามันควรค่าแก่การพิจารณาความคิดของ มีประสิทธิภาพมากมายที่จะได้รับจากการจัดการบิตและการดำเนินการระดับบิตในคำ 64 บิตไปไกลกว่ามากในคำ 32 บิต ในระยะสั้นคุณสามารถดำเนินการเพิ่มเติมในการลงทะเบียนโดยไม่ต้องกดปุ่มหน่วยความจำและจากมุมมองด้านประสิทธิภาพนั่นเป็นชัยชนะที่ยิ่งใหญ่
ลองดูที่ Volume 4, Pre-Fascicle 1A เพื่อดูตัวอย่างของเทคนิคเด็ด ๆ ที่ฉันกำลังพูดถึง
นอกเหนือจากความสามารถในการจัดการกับหน่วยความจำที่มากขึ้น x86_64 ยังมีการลงทะเบียนมากขึ้นทำให้คอมไพเลอร์สามารถสร้างโค้ดที่มีประสิทธิภาพมากขึ้น การปรับปรุงประสิทธิภาพมักจะมีขนาดค่อนข้างเล็ก
สถาปัตยกรรม x86_64 นั้นเข้ากันได้กับ x86 เป็นไปได้ที่จะเรียกใช้ระบบปฏิบัติการ 32 บิตที่ไม่ได้แก้ไข นอกจากนี้ยังสามารถเรียกใช้ซอฟต์แวร์ 32 บิตที่ไม่ได้แก้ไขจากระบบปฏิบัติการ 64 บิต ซึ่งจะต้องใช้ไลบรารี 32- บิตตามปกติทั้งหมด อาจต้องติดตั้งแยกต่างหาก
เธรดนี้ยาวเกินไปแล้ว แต่ ...
คำตอบส่วนใหญ่มุ่งเน้นไปที่ข้อเท็จจริงที่ว่าคุณมีพื้นที่ที่อยู่ 64- บิตที่ใหญ่กว่าดังนั้นคุณจึงสามารถจัดการกับหน่วยความจำได้มากขึ้น ประมาณ 99% ของการใช้งานทั้งหมดนี้ไม่เกี่ยวข้องทั้งหมด เสียงโห่ใหญ่
จริงเหตุผล 64 บิตเป็นสิ่งที่ดีคือไม่ได้ว่าการลงทะเบียนมีขนาดใหญ่ แต่มีครั้งที่สองเป็นจำนวนมากของพวกเขา! นั่นหมายความว่าคอมไพเลอร์สามารถเก็บค่าของคุณได้มากขึ้นในการลงทะเบียนแทนที่จะส่งพวกเขาไปยังหน่วยความจำและโหลดพวกเขากลับมาในไม่กี่คำแนะนำในภายหลัง ถ้าและเมื่อคอมไพเลอร์ที่ปรับให้เหมาะสมเพิ่มกำลังเปิดลูปของคุณให้คุณมันสามารถคลี่มันออกได้สองเท่าซึ่งจะช่วยให้ประสิทธิภาพดีขึ้น
นอกจากนี้ยังมีการกำหนดรูทีนย่อย caller / callee สำหรับ 64- บิตเพื่อกำหนดให้พารามิเตอร์ส่วนใหญ่ผ่านการลงทะเบียนแทนการเรียกผู้เรียกเข้าสู่สแต็กและ callee จะปรากฏขึ้น
ดังนั้นแอปพลิเคชัน "ทั่วไป" C / C ++ จะได้รับการปรับปรุงประสิทธิภาพประมาณ 10% หรือ 15% เพียงแค่ทำการคอมไพล์ใหม่สำหรับ 64 บิต (สมมติว่าบางส่วนของแอพคำนวณถูกผูกไว้แน่นอนว่านี่ไม่ใช่ guarenteed คอมพิวเตอร์ทุกเครื่องจะรอด้วยความเร็วเท่ากันระยะทางของคุณอาจแตกต่างกัน)
นอกเหนือจากข้อได้เปรียบที่กล่าวมาแล้วนี่คือความปลอดภัยอีกมาก:
ข้อดีอีกอย่างที่ควรคำนึงถึงคือปริมาณของหน่วยความจำเสมือนที่ต่อเนื่องกันที่จัดสรรด้วยvmalloc()
ในเคอร์เนล Linux สามารถใหญ่กว่าในโหมด 64 บิต
ด้วยเครื่อง 32- บิตคุณมีหน่วยความจำเหลือเพียง 4,294,967,295 ไบต์เท่านั้น ด้วยเครื่อง 64 บิตคุณมีหน่วยความจำ 1.84467441 × 10 ^ 19 ไบต์
ตัวประมวลผล 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 ด้วยเหตุนี้
ใบเสนอราคาจาก Microsoft.com:
ในตารางต่อไปนี้ทรัพยากรสูงสุดที่เพิ่มขึ้นของคอมพิวเตอร์ที่ใช้ Windows รุ่น 64 บิตและตัวประมวลผล Intel 64 บิตเปรียบเทียบกับทรัพยากรสูงสุด 32 บิตที่มีอยู่
Kristof และ Poshi ได้ระบุความแตกต่างทางเทคนิคหลักระหว่าง 32 และ 64 บิต OS 'ประสบการณ์การใช้งานของผู้ใช้มักจะแตกต่างจากทฤษฎีมาก Windows เวอร์ชัน 64 บิตสำหรับผู้บริโภคจนถึงปัจจุบัน (XP และ Vista) มีช่องโหว่ขนาดใหญ่ในการรองรับไดรเวอร์ ฉันมีเครื่องพิมพ์สแกนเนอร์และอุปกรณ์ภายนอกอื่น ๆ จำนวนมากที่แบนไม่ทำงานกับรุ่น 64 บิตที่ทำงานได้ดีกับรุ่น 32 บิต อุปกรณ์เหล่านี้มีไดรเวอร์ 64 บิตและยังคงใช้งานไม่ได้ ณ จุดนี้ฉันขอแนะนำให้คุณหลีกเลี่ยงสิ่งที่ผู้บริโภคใช้ซึ่งเป็น 64 บิตจาก Microsoft จนกว่าคุณจะได้ยินว่า Windows 7 จัดการเรื่องนี้อย่างไรจากผู้ใช้งานจริงไม่ใช่แค่ uber-geeks ที่ปัจจุบันมีการเข้าถึง ให้เวลาอย่างน้อย 6 เดือนและดูว่าผู้คนกำลังประสบกับอะไร
บางโปรแกรมเกมการเล่นใช้บิตคณะกรรมการตัวแทน ยกตัวอย่างเช่นหมากรุกหมากฮอสและโอเทลโลมีบอร์ดขนาด 8x8 คือ 64 สี่เหลี่ยมดังนั้นอย่างน้อย 64 บิตในหนึ่งคำของเครื่องจักรจะช่วยให้ประสิทธิภาพดีขึ้น
ฉันจำได้ว่าเคยอ่านเกี่ยวกับโปรแกรมหมากรุกที่มี 64- บิตบิวด์นั้นเร็วกว่ารุ่น 32 บิตเกือบสองเท่า
คำว่า 32- บิตและ 64- บิตอ้างอิงถึงวิธีที่โปรเซสเซอร์คอมพิวเตอร์ (หรือที่เรียกว่า CPU) จัดการข้อมูล Windows รุ่น 64 บิตจัดการหน่วยความจำเข้าถึงโดยสุ่ม (RAM) จำนวนมากได้อย่างมีประสิทธิภาพมากกว่าระบบ 32 บิต
ความเร็วอาจแตกต่างกันในความคิดของฉัน
อีกประเด็นหนึ่งที่เกี่ยวกับ 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 บิตดังนั้นจึงมีความจำเป็นที่จะต้องรักษาเครื่องรุ่นเก่าให้เป็นเสมือนจริงหรือของจริง
การเปลี่ยนขนาดของที่อยู่สามารถมีผลกระทบใหญ่และผลกระทบบางอย่าง
เพื่อจุดประสงค์ในทางปฏิบัติคุณอาจไม่สังเกตเห็นความแตกต่าง
คุณต้องมี CPU 64 บิต (CPU ส่วนใหญ่ในไม่กี่ปีที่ผ่านมา) เพื่อติดตั้งระบบปฏิบัติการ 64 บิต
ข้อดีบางประการของระบบปฏิบัติการ 64 บิต:
ภายใต้สถานการณ์ส่วนใหญ่โปรแกรม 64 บิตใช้หน่วยความจำเพิ่มขึ้นเล็กน้อย แต่สำหรับคอมพิวเตอร์ส่วนบุคคลโดยทั่วไปจะไม่สังเกตเห็น