SORU
21 Aralık 2008, Pazar


64-bit Windows üzerinde uzun bit boyutu nedir?

Değil uzun zaman önce, birisi long 64 bit makinelerde 64 bit olmadığını söyledi ve her zaman int kullanmalıyım. Bu bana pek mantıklı gelmedi. Docs (Apple'ın resmi sitesi) long 64-bit İŞLEMCİ için derleme 64 bit gerçekten olduğunu söylüyorlar gördüm. 64-bit Windows üzerinde olduğunu ve ne buldum araştırdım

  • Windows: long int uzunluğu, ve özel yeni veri tipleri 32-bit kalır 64-bit tamsayılar için tanımlı.

(http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2)

Kullanmalıyım? Windows long gibi uw, sw ((BM)genişlik imzalı) gibi bir şey tanımlamak, ve aksi takdirde hedef CPU bitsize bir kontrol yapmalıyım?

CEVAP
21 Aralık 2008, Pazar


Unix dünyasında, 64-bit platformlar için tamsayılar ve işaretçileri boyutları için birkaç olası düzenlemeler vardı. İki en yaygın kullanılan İLP64 (aslında, bu sadece çok az bir örnek; Cray böyle oldu) ve LP64 hemen hemen her şey için (). Bu acronynms gelen 'int, long, işaretçiler 64-bit' ve 'uzun, işaretçiler 64-bit.

Type           ILP64   LP64   LLP64
char              8      8       8
short            16     16      16
int              64     32      32
long             64     64      32
long long        64     64      64
pointer          64     64      64

Bu İLP64 sistemi terk edilmiş vaziyette iyilik LP64 (yani, hemen hemen tüm katılımcılar daha sonra kullanılan LP64, temel öneriler Aspen grup; sadece sistemleri ile uzun mirasını 64-bit işletim kullanın farklı bir düzeni). Tüm 64-bit Unix sistemler modern LP64 kullanın. MacOS X ve Linux modern 64-bit sistemler de vardır.

Microsoft 64-bit geçiş için farklı bir planı kullanır: (uzun uzun, işaretçiler 64-bit'). LLP64 Bu 32-bit yazılım değişiklik olmadan çekirdekler anlam değer taşıyor. Herkes farklı olmanın ihtar ve ayrıca kod 64-bit kapasiteleri yararlanmak için revize edilmesi gerekir. Her zaman revizyon gerekli oldu; sadece olanları Unıx platformları üzerinde gerekli düzenlemeler farklı bir dizi oldu.

Eğer tasarım yazılımı platformdan bağımsız tamsayı türü adları, muhtemelen kullanarak C99 <inttypes.h> başlık, hangi türleri mevcuttur platformu sağlar, imzalı (liste) ve işaretsiz (listede; öneki ile 'u'):

  • int8_t - 8-bit tamsayı
  • int16_t - 16-bit tamsayı
  • int32_t - 32-bit tamsayı
  • int64_t - 64-bit tamsayı
  • uintptr_t - işaretsiz tamsayı işaretçisi tutmak için yeterince büyük
  • Platformu (int64_t daha büyük olabilir) tam sayı intmax_t - en büyük boyutu

Uygulamanız gerektiği yerde bu tür bir kod kullanarak yapabilirsiniz, ve sistemi farklı olabilir, bu nedenle çok dikkatli olmak. Orada bir intptr_t türü işaretli bir tamsayı türü için holding işaretçiler; gerekir plan üzerinde kullanarak, ya da sadece kullanarak olarak sonuç çıkarma iki uintptr_t değerler (ptrdiff_t).

Ama, soru işaret ettiği gibi (küfür), 64-bit makinelerde tamsayı veri türlerinin boyutları için farklı sistem vardır. Alışmak; dünyayı değiştirmeyecek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dogbert files

    Dogbert file

    12 Ocak 2012
  • Noam Erez

    Noam Erez

    3 NİSAN 2012
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009