Hầu hết các phần mềm sẽ hoạt động giống nhau khi được biên dịch cho cả kiến trúc Intel / AMD 32 và 64 bit. Tuy nhiên, một số phần mềm sẽ không. Ngoài sự lười biếng, hoặc tiếp cận đối tượng lớn hơn, có một số lý do cụ thể tại sao việc biên dịch lại thành 64 bit sẽ không hoạt động.
Phần mềm có thể sử dụng các hoạt động con trỏ không an toàn. Có lẽ một chương trình đặt một con trỏ vào một int, thường là 32 bit cho hầu hết các trình biên dịch C và C ++. Con trỏ là 64 bit trong chương trình 64 bit. Điều đó không làm việc.
Các hoạt động dịch chuyển bit có thể tạo ra các kết quả khác nhau nếu loại số nguyên đang được sử dụng có kích thước khác nhau. Đây có thể là một vấn đề khi sử dụng loại dữ liệu thông thường thay vì typedef tiêu chuẩn, chẳng hạn nhưint32_t
Một kiểu dữ liệu được sử dụng trong một liên minh có thể thay đổi kích thước, thay đổi hành vi của liên minh.
Phần mềm có thể chỉ dựa vào các thư viện chỉ có 32 bit. Nói chung, một chương trình 64 bit sẽ chỉ hoạt động với các thư viện 64 bit do các giả định về ngăn xếp, con trỏ, v.v.
Khó khăn mà bạn hỏi trong câu hỏi của bạn chỉ đơn giản là trong một số cơ sở mã có thể có hàng triệu dòng mã thực hiện các hoạt động không an toàn, đưa ra các giả định không an toàn, có các phím tắt và "tối ưu hóa" thông minh được các nhà phát triển đưa vào. Mã này sẽ không biên dịch trong môi trường 64 bit, hoặc nó sẽ biên dịch nhưng có lỗi show-stopper. Có thể mất một thời gian dài để khắc phục tất cả các vấn đề. Có thể một công ty sẽ sửa chúng theo thời gian cho đến khi có thể phát hành phiên bản 64 bit. Có thể một công ty sẽ phát triển "phiên bản 2" cùng với các bản phát hành bảo trì hiện tại vì việc viết lại hoàn toàn là cần thiết.
Đạo đức của câu chuyện là viết mã sạch và không cố gắng đoán thứ hai trình biên dịch hoặc thêm các tối ưu hóa thông minh không cần thiết, có thể phá vỡ phần mềm và có thể không giúp được gì.
Bài viết này đi sâu vào chi tiết hơn nhiều so với tôi có thể hy vọng đưa vào câu trả lời này: 20 vấn đề về chuyển mã C ++ trên nền tảng 64 bit
sizeof(int)==sizeof(void*)