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?
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?
Yanıtlar:
İş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.
@ Barrem23'ün açıkladığı gibi, verilerin adreslenmesi gerekir ve geleneksel mimarilerdeki en küçük sınır bir bayttır.
Ancak bu soru c ++ olarak etiketlendiğinden , tek tek öğelerin bit olarak depolanmasına izin vermek std::vector<bool>
için uzmanlaşmış olanı işaret etmek faydalı olabilir . Bu, bazı işlevlerden fedakarlık yaparak yer kazandıracak (örneğin std::search
çalışmayabilir).