Boolean değeri neden yalnızca bir bit gerektirdiğinde bilgisayarın içinde bayt olarak depolanıyor?


32

Kısa süre önce kod yazmayı öğrenmeye başladım ve kitabımda bu soru ile karşılaştım. "Boolean değeri neden yalnızca bir bit gerektirdiğinde bilgisayarın içinde bayt olarak depolanıyor?" Birisi bu soruya daha fazla ışık tutabilir mi?


10
Bu kesinlikle doğru konuşmuyor. Bazı diller (C / C ++ gibi), bu bitler tek bir baytta paketlenmişse, boolean değerlerini tek bitler olarak kaydetme yolları sağlar. Başka bir deyişle, C'de sekiz booleanı bir baytta saklayabilirsiniz. Ancak çok az kişi bunu kullanıyor çünkü hafıza ucuz ve işlemciler 8/16/32/64 bit'lik parçalar içindeki verileri değiştiriyor.
Robotu

Benzer bir soruya cevap bu görmelisiniz! Orada büyük bir referans alacaksınız ... Şerefe!
Sam


Yanıtlar:


49

İşlemcinin kolayca adresleyebileceği ile ilgili olmalı. Örneğin, bir x86 işlemcisinde bir eax(32 bit), ax(16 bit) ve bir ah(8 bit) var, ancak tek bit kayıt yok. Bu yüzden tek bir bit kullanması için CPU'nun değeri değiştirmek için bir okuma / değiştirme / yazma yapması gerekecektir. Bayt olarak depolanırsa, değeri incelemek / değiştirmek için tek bir okuma veya yazma kullanılabilir.

Ek olarak, tek bir bitin bir tam byte'a karşı daha iyi kullanılıp kullanılmayacağını merak edebilir, sonuçta bir byte 7 bit kaybeder. Alan bir kısıtlama değilse, bayt için gitmek gerekir, çünkü en azından x86 ve diğerlerinin düşündüğü gibi, genellikle tek bir bitin okunmasından / değiştirilmesinden / yazılmasından çok daha hızlı olan bir boolun hızlı bir şekilde ayarlanması / silinmesi için bir talimat vardır. . Kişisel ölçümlerden, okuma / mod / yazma yönteminin tekli öğretim yönteminden 5 kat daha yavaş olduğunu gördüm.


6
Eksik olan tek kelime "Sınır Hizalama" dır.
Manoj R

3
Öte yandan, daha küçük bir veri setiyle daha iyi önbellek kullanımı nedeniyle, bireysel bitleri kullanmaktan 2 kat fazla hız gördüm.
Michael Borgwardt

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.