ความแตกต่างระหว่างซอฟต์แวร์ 32 บิตและซอฟต์แวร์ 64 บิตคือขนาดของพอยน์เตอร์และขนาดของเรจิสเตอร์จำนวนเต็ม แค่นั้นแหละ.
นั่นหมายความว่าพอยน์เตอร์ทั้งหมดในโปรแกรมของคุณมีขนาดใหญ่เป็นสองเท่า และ (อย่างน้อยก็ในสถาปัตยกรรม ILP32 / LP64) ขนาดของคุณlong
ก็ใหญ่เป็นสองเท่าเช่นกัน โดยทั่วไปแล้วจะเพิ่มขนาดรหัสวัตถุประมาณ 30% ซึ่งหมายความว่า ...
- รหัสวัตถุของคุณจะใช้เวลานานขึ้น ~ 30% ในการโหลดจากดิสก์ไปยัง RAM
- รหัสวัตถุของคุณจะใช้พื้นที่ในหน่วยความจำเพิ่มขึ้น ~ 30%
- คุณได้ลดแบนด์วิดธ์หน่วยความจำของคุณ (สำหรับรหัสวัตถุ) ได้อย่างมีประสิทธิภาพลดลง ~ 20%
- คุณลดขนาดของแคชคำสั่งลงอย่างมีประสิทธิภาพ ~ 20%
สิ่งนี้มีผลกระทบด้านลบต่อประสิทธิภาพ
การทำเช่นนี้เหมาะสมถ้าคุณสามารถ "ซื้อคืน" ประสิทธิภาพการทำงานเหล่านั้นมีค่าใช้จ่ายอย่างใด โดยทั่วไปมีสองวิธีในการทำเช่นนี้: คุณทำคณิตศาสตร์จำนวนเต็ม 64 บิตหรือคุณต้องการหน่วยความจำที่แมปของ GiByte มากกว่า 4 หากหนึ่งหรือทั้งคู่เป็นจริงมันสมเหตุสมผลที่จะใช้ซอฟต์แวร์ 64 บิตมิฉะนั้นจะไม่มี
หมายเหตุ: มีบางสถาปัตยกรรมที่ไม่มีตัวแปร 32 หรือ 64 บิตที่สอดคล้องกัน ในกรณีนั้นคำถามชัดเจนไม่สมเหตุสมผล รู้จักกันดีที่สุดคือ IA64 ซึ่งเป็นเพียง 64 บิตและไม่มีตัวแปร 32 บิตและ x86 / AMD64 ซึ่งแม้ว่าจะเกี่ยวข้องอย่างใกล้ชิดสถาปัตยกรรมที่แตกต่างกัน x86 เป็น 32 บิตเท่านั้น AMD64 เป็น 64 บิตเท่านั้น
จริงๆแล้วคำสั่งหลังนั้นไม่เป็นความจริง 100% อีกต่อไป Linux เพิ่งเพิ่ม x32 ABI ซึ่งอนุญาตให้คุณเรียกใช้รหัส AMD64 ที่มีตัวชี้ 32 บิตดังนั้นแม้ว่ามันจะไม่ใช่สถาปัตยกรรมของ CPU ที่ "เหมาะสม" แต่ก็เป็นวิธีการใช้สถาปัตยกรรม AMD64 ในแบบที่เหมือนกับว่ามันเป็นเจ้าของภาษา ชุดตัวแปร 32 บิต สิ่งนี้ทำอย่างแม่นยำเพราะค่าใช้จ่ายด้านประสิทธิภาพที่ฉันกล่าวถึงข้างต้นก่อให้เกิดปัญหาที่วัดได้จริงและเชิงปริมาณสำหรับผู้ใช้โลกแห่งความจริงที่ใช้รหัสโลกแห่งความจริงในระบบโลกแห่งความจริง