32 ve 64 bit Intel / AMD mimarileri için derlendiğinde çoğu yazılım aynı şekilde çalışacaktır. Ancak, bazı yazılımlar olmaz. Tembellik dışında ya da daha geniş bir kitleye ulaşmanın 64 bit olarak yeniden derlenmesinin işe yaramayacağının belirli nedenleri var.
Yazılım güvenli olmayan işaretçi işlemlerini kullanabilir. Belki de bir program bir işaretleyiciyi int'ye yerleştirir, bu çoğu C ve C ++ derleyicileri için genellikle 32 bit'dir. İşaretçiler 64 bit programda 64 bit. Bu çalışmıyor.
Bit kaydırma işlemleri, kullanılan tamsayı türü farklı bir boyuttaysa farklı sonuçlar verebilir. Bu gibi standart bir typedef yerine normal bir veri türü kullanırken bir sorun olabilir.int32_t
Bir birleşmede kullanılan bir veri türü, birliğin davranışını değiştirerek boyutlarını değiştirebilir.
Yazılım sadece 32-bit kütüphanelere güvenebilir. Genel olarak, 64 bitlik bir program yalnızca yığın, işaretçiler vb. Hakkındaki varsayımlar nedeniyle 64 bitlik kütüphanelerle çalışacaktır.
Sorunuzda sorduğunuz zorluk, basitçe bazı kod tabanlarında, güvensiz işlemler yapan, güvensiz varsayımlar yapan, kısayollar ve geliştiriciler tarafından zekice hazırlanmış "optimizasyonlar" yapan milyonlarca kod satırı olabilir. Kod 64 bitlik bir ortamda derlenmeyecek veya derlenecek ancak show-stopper hatalarına sahip olacaktır. Tüm sorunları çözmek uzun zaman alabilir. Belki bir şirket 64 bitlik bir sürümü piyasaya sürünceye kadar zamanla düzeltebilir. Belki bir şirket mevcut bakım sürümleriyle birlikte "sürüm 2" geliştirebilir, çünkü toplam yeniden yazma gerekli.
Hikayenin ahlaki, temiz kod yazmak ve derleyiciyi ikinci kez tahmin etmeye çalışmak veya ihtiyaç duyulmayan akıllı optimizasyonlar eklemek istemiyor, yazılımı kırabilir ve muhtemelen yine de yardımcı olmaz.
Bu makale, bu cevaba dahil etmeyi umduğumdan çok daha fazla ayrıntı içeriyor: 64 bit platformda C ++ kodu taşıma işleminin 20 sorunu
sizeof(int)==sizeof(void*)