SORU
27 Mayıs 2009, ÇARŞAMBA


Farklı işaretçiler farklı boyutlarda olduğu herhangi bir platform var mı?

C standardı farklı işaretçiler farklı boyutlarda, örneğin sizeof(char*) != sizeof(int*) için izin verir. Öyle, ancak, eğer bir işaretçi void* Orijinal türü için daha sonra geri dönüştürülür, özgün değerine eşit olarak karşılaştırmak gerekir gerektirir. Bu nedenle, her türlü T doğru sizeof(void*) >= sizeof(T*) Bu şekilde mantıklı mı?

Bugün kullanılan en yaygın platform (x 86, PPC, KOL ve 64-bit türevleri, vb.), tüm işaretçiler boyutu yerel boyutu (4 veya 8 bayt), sivri-türü ne olursa olsun kayıt eşittir. Farklı işaretçiler farklı boyutları olabileceği ezoterik ya da gömülü herhangi bir platform var mı? Özellikle soruyorumveriayrıca eğer platformlardır varsa bilmek isterim ancak nerede işaretçilerişlevigöstericiler alışılmadık boyutları var.

Kesinlikle ben değilimdeğilC-s işaretçi üyeleri ve üye fonksiyonları için işaretçi sormuş. O atın üzerinde alışılmadık boyutları üzerinde ortak platformlar, ve olabilir bile farklılık içinde bir platform, bağlı özellikleri işaretçi-sınıf (non-polimorfik, tek kalıtım, çoklu kalıtım, sanal devralma veya eksik yazın).

CEVAP
8 EKİM 2009, PERŞEMBE


Answer from the C FAQ:

Başbakan 50 serisi kullanılan segment 07777, ofset 0 için null işaretçi, en azından PL/I. daha Sonraki modellerde kullanılan segment 0, 0 mahsup için null işaretçi C, gerektiren, yeni talimatlar gibi TCNP (Test C Null İşaretçi), açıkça bir sop için tüm kaybolmamış kötü yazılmış bir C kodu olan yapılan yanlış varsayımlar. Eski, kelime-ele Prime makineleri de büyük bayt işaretçiler (word işaretçiler (int *'ler). daha char *'ler) gerektiren azılı edildi

Eclipse MV serisi Veri Genel üç mimari desteklenen işaretçi biçimleri (word, byte ve bit işaretçileri), iki tarafından kullanılan C derleyicileri: bayt işaretçi için char * geçersiz * ve kelime işaretçileri için her şey. Tarihsel nedenlerden dolayı sırasında evrim 32-bit OG hattından 16-bit Nova satır, kelime ve bayt işaretçiler işaretçiler vardı uzaklık, Yönlendirme ve halka koruma biti farklı yerlerde kelime. Bir işlev için uyumsuz gösterici bir biçimi geçirmeden koruma hataları sonuçlandı. Sonunda, MV C derleyicisi pek çok uyumluluk seçenekleri işaretçi tür uyuşmazlığı hataları vardı kod ile başa çıkmak için denemek ekledi.

Anabilgisayar (iç) bit deseni 06000 kullanmak Honeywell-Bull bazı işaretçiler null.

CDC Cyber 180 Serisi 48-bit işaretçileri yüzük, segmenti içerir ve ofset. Çoğu kullanıcı (halka 11) 0xB00000000000 null işaretçiler var. Eski CDC ortak olanlar-tamamlayıcı geçersiz adresleri de dahil olmak üzere her türlü veri, özel bir bayrak gibi hepsi-bir-bit kelime kullanmaya makineleri.

Eski HP 3000 serisi kullanan farklı bir adresleme şeması için bayt adresleri başka bir kelime adresleri; gibi çeşitli makineler üzerinde bu nedenle kullanan farklı gösterimi için char * geçersiz * pointer daha başka işaretçiler.

Symbolics Lisp Makinesi, etiketli bir mimari, hatta geleneksel sayısal işaretçileri yok; çifti (aslında varolmayan bir kolu) C boş gösterici olarak kullanır.

`Bellek modeline bağlı olarak, 8086-aile işlemciler (PC uyumlu) kullanımı" 16-bit veri işaretçileri ve 32-bit işlev işaretçileri, ya da tam tersi kullanabilir.

64-bit Cray makineleri bir kelime; char * alt 48 bit int * temsil bazı ayrıca üst 16 bit bazı kelime içinde bayt adresi belirtmek için kullanır.

Ek bağlantılar: bu makineler hakkında daha fazla bilgi ile message from Chris Torek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006