SORU
22 AĞUSTOS 2011, PAZARTESİ


Ne zaman tamsayı<->pointer gerçekten doğru mu?

Ortak folklor diyor ki:

  • Tür sistemi bir sebebi var. Tamsayılar ve işaretçiler farklı türleri vardır, çoğu durumda bir malpraktis aralarında döküm, tasarım hatası gösterebilir ve kaçınılmalıdır.

  • Böyle bir atama yapıldı, hiçbir varsayımlar yapılacaktır boyutları konusunda tam sayılar ve işaretçiler (döküm void* int En kolay yolu yapmak için kod başarısız 64), ve yerine int gerekir intptr_t uintptr_t stdint.h.

Bilerekgerçekten yararlı oldubu tür gerçekleştirmek için atmalarını?

(Not: taşınabilirlik fiyatı biraz daha kısa kod sayılmaz "gerçekten faydalı".)


Bildiğim bir örnek:

  • Bazıkilidi serbest çok işlemcili algoritmalar2-byte-alligned işaretçi biraz fazlalık olduğu gerçeği yararlanmak. Daha sonra örneğin boolean bayrak olarak işaretçinin en düşük bit kullanın. Bir işlemci uygun bir talimat seti ile, bu bir kilitleme mekanizması için gerekirse işaretçi ve boolean bayrak ayrı olsaydı gerekli olacaktı) ortadan kaldırabilir.
    (Not: Bu uygulama güvenli bir şekilde java üzerinden Java ile yapmak mümkün olsa bile.açıklama.eşzamanlı.atom.AtomicMarkableReference)

Bir şey daha?

CEVAP
22 AĞUSTOS 2011, PAZARTESİ


Bazen onlar bir şekilde bir hashsum bir parçası olmak gerektiğinde tamsayı için işaretçi attı. Ayrıca atıyorum onlara tamsayılar için bazı bitfiddling ile bazı implemetnations nerede garantili göstericiler hep bir veya iki tane yedek parçaları sol, ben de kodlamak CAK veya RB Ağacı bilgileri Sol/Sağ işaretçileri yerine sahip ek bir üyesi. Ama bu asla düşünmek için ortak her türlü Çözümü olarak tavsiye ederim hepsi çok uygulama özeldir. Bazen de tehlike işaretçisi böyle bir şey ile uygulanabilir duydum.

Bazı durumlarda talep ediyorum kimliğimi olarak örneğin sunuculara iletir nesne başına benzersiz bir kimliğe ihtiyacım var. Bazı bellek kaydetmek için ihtiyacım var, ve buna değer ne zaman bağlama bağlı olarak, bu tür bir kimlik olarak benim nesnesinin adresini kullanıyorum, ve genellikle bir tam sayı atmak zorunda.

Gömülü sistemler (canon kameralar, chdk görmek gibi) ile çalışırken sık sık sihirli addesses vardır, (void*)0xFFBC5235 veya benzeri genellikle de orada bulundu

düzenleme:

Genellikle işaretsiz bir tamsayı için bir typedef olan bir pthread_t döndüren tökezledi (aklımda) pthread_self() üzerinde sadece. Bazı iplik yapı, söz konusu iş parçacığı temsil eden bir işaretçi olsa da içten. Genel olarak bir opak işlemek için başka bir yerde kullanılmış olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011
  • Diogo Oliveira

    Diogo Olivei

    4 HAZİRAN 2006
  • SolidWorksTutoriels

    SolidWorksTu

    14 Kasım 2013