x86-64 komut seti, çalıştırılabilir kodun düzenlenmesine yardımcı olmak için daha fazla kayıt ve diğer geliştirmeler ekler. Ancak, birçok uygulamada artan işaretçi boyutu bir yüktür. Her işaretçideki fazladan kullanılmayan baytlar önbelleği tıkar ve hatta RAM'i taşabilir. GCC, örneğin, -m32
bayrağı ile oluşturur ve bunun sebebi olduğunu varsayalım.x86-64 ISA ile 32 bit işaretçiler: neden olmasın?
32 bitlik bir değer yüklemek ve bunu bir işaretçi olarak ele almak mümkündür. Bu ekstra talimatlar gerektirmez, sadece 32 biti yükler ve hesaplar ve sonuçta ortaya çıkan adres. Ancak, platformlar farklı hafıza haritalarına sahip olduklarından, numara taşınabilir değildir. Mac OS X'te, adres alanının tüm düşük 4 GiB'si saklıdır. Yine de, yazdığım bir program için, gerçek 64 bit adresler üzerinde gelişmiş performans kullanmadan veya -m32
ile derleme yapmadan önce, 0x100000000L
'u 32 bit "adresler" e eklemeye devam edin.
32 bit, x86-64 platformuna sahip olmak için herhangi bir temel engel var mı? Böyle bir chimera'yı desteklemenin herhangi bir işletim sistemine karmaşıklık katacağını ve son 20% 'nin sadece Make it Work ™' i istemesini isteyen herkesin var olduğunu düşünüyoruz, fakat yine de bunun çeşitli hesaplama yoğunluklu programlar için en uygun olacağını düşünüyor.
Uygulamaların çoğunda profillerin oluşturulması, işaretçi boyutunun artması nedeniyle önemli bir kayıp olmadığını gösterir. – Puppy
Intel Derleyicisi, ['Qauto-ilp32'] seçeneğine sahiptir (http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/copts/ccpp_options/option_qauto_ilp32 .htm) x64 modunda bile 32 bit biti işaretçileri kullanmaya çalışır. – Mysticial
@Mysticial ama bu daha çok eski moda "yakın" ve "uzak" işaretçilere benziyor, değil mi? Bu çözüm tamam, sanırım, ama atıfta bulunduğum kadar temiz değil. – Potatoswatter