64-битный bool звучит как ужасная идея для x86-64. Я предполагаю, что человек, который написал это, думал о 32-битных машинах с 32-битными указателями в то время.
Современный x86 имеет очень хорошую поддержку для выровненных загрузок / хранилищ и для распаковки байта для заполнения регистра на лету. Если x86 является основной целью, предпочтение отдается 8-битному логическому значению, особенно в тех случаях, когда он сохраняет байты, что приводит к меньшему использованию кэша. В редком случае, когда кеш не является проблемой вообще, 32-битный является естественным размером, и в некоторых случаях может быть сохранена инструкция, когда логическое значение добавляется или умножается непосредственно на int
, позволяя использовать логическое значение как операнд памяти, вместо того, чтобы загружаться с movzx
.
Для обычного случая тестирования и ветвления на логическом значении процессоры Intel и AMD имеют практически нулевую разницу в производительности между 8-битными и 32-битными операндами, независимо от того, находятся ли они в памяти или в регистре.