ซอฟต์แวร์ส่วนใหญ่จะทำงานเหมือนกันเมื่อรวบรวมสำหรับสถาปัตยกรรม Intel / AMD ทั้ง 32 และ 64 บิต อย่างไรก็ตามซอฟต์แวร์บางตัวจะไม่ นอกเหนือจากความเกียจคร้านหรือเข้าถึงผู้ชมจำนวนมากแล้วยังมีเหตุผลบางประการที่การคอมไพล์ซ้ำเป็น 64 บิตจะไม่ทำงาน
ซอฟต์แวร์อาจใช้การดำเนินการตัวชี้ที่ไม่ปลอดภัย บางทีโปรแกรมอาจวางตัวชี้ลงใน int ซึ่งโดยทั่วไปคือ 32 บิตสำหรับคอมไพเลอร์ C และ C ++ ส่วนใหญ่ พอยน์เตอร์คือ 64 บิตในโปรแกรม 64 บิต ที่ใช้งานไม่ได้
การทำงานของบิตกะอาจให้ผลลัพธ์ที่แตกต่างหากประเภทจำนวนเต็มที่ใช้มีขนาดแตกต่างกัน นี่อาจเป็นปัญหาเมื่อใช้ชนิดข้อมูลปกติแทนที่จะเป็น typedef มาตรฐานเช่นint32_t
ชนิดข้อมูลที่ใช้ในสหภาพอาจเปลี่ยนขนาดเปลี่ยนพฤติกรรมของสหภาพ
ซอฟต์แวร์อาจใช้ไลบรารีที่มีขนาด 32 บิตเท่านั้น โดยทั่วไปโปรแกรม 64 บิตจะทำงานกับไลบรารี 64 บิตเท่านั้นเนื่องจากสมมติฐานเกี่ยวกับสแต็กพอยน์เตอร์และอื่น ๆ
ปัญหาที่คุณถามเกี่ยวกับคำถามของคุณก็คือว่าในบางรหัสฐานอาจมีหลายล้านบรรทัดของรหัสที่ดำเนินการที่ไม่ปลอดภัยทำให้สมมติฐานที่ไม่ปลอดภัยมีทางลัดและ "เพิ่มประสิทธิภาพ" ฉลาดโดยนักพัฒนา รหัสจะไม่รวบรวมในสภาพแวดล้อม 64 บิตหรือจะรวบรวม แต่มีข้อบกพร่อง show-stopper อาจใช้เวลานานในการแก้ไขปัญหาทั้งหมด บางที บริษัท อาจจะซ่อมพวกเขาเมื่อเวลาผ่านไปจนกว่าจะมีรุ่น 64 บิต บริษัท อาจจะพัฒนา "รุ่น 2" ควบคู่ไปกับการเปิดตัวการบำรุงรักษาในปัจจุบันเนื่องจากจำเป็นต้องมีการเขียนซ้ำทั้งหมด
คุณธรรมของเรื่องราวคือการเขียนโค้ดที่สะอาดและอย่าพยายามคาดเดาคอมไพเลอร์หรือเพิ่มประสิทธิภาพการเพิ่มประสิทธิภาพที่ฉลาดที่ไม่ต้องการสามารถทำลายซอฟต์แวร์และอาจช่วยไม่ได้
บทความนี้มีรายละเอียดมากกว่าที่ฉันคาดหวังไว้ในคำตอบนี้: 20 เรื่องของการย้ายรหัส C ++ บนแพลตฟอร์ม 64 บิต
sizeof(int)==sizeof(void*)