Зачем BOOL четырёхбайтовый?

программирование C++ cpp типы данных bool

цитирую строку из windows.h:
typedef long BOOL

Зачем логический тип делать четырёхбайтовым?


Примечание:
Набросал вот такой код на Qt:

bool *bl = new bool [10000000];
BOOL *BL = new BOOL [10000000];
QTime timer;
int t1, t2;

timer.start();
for (int i=0; i<10000000; i++)
bl[i] = bl[i];
t1 = timer.elapsed();

timer.start();
for (int i=0; i<10000000; i++)
BL[i] = BL[i];
t2 = timer.elapsed();

cout << t1 << '\n' << t2;

В ответе в среднем вижу числа:
75
100

Код скомпилирован и запущен прямо в среде:
>> Qt Creator 1.0.0
>> Based on Qt 4.5.0
>> Built on Mar 4 2009 at 15:46:33

Никакого плюса от четырёхбайтовости не вижу . . .
В цикле производится и чтение и запись . . . в чём прикол . . .
У кого-нибудь есть тесты опровергающие мои?

Примечание:
Кстати, процессор AMD Sempron 1800Hz

Примечание:
Слышал вариант, что БУЛЛ появился раньше чем булл.
Отмечу самый адекватный ответ ... Сложно выбрать ё
Ответы:
Просто, чтоб не выделялся среди остальных. В WinAPI часто можно видеть, как смешиваются DWORD, BOOL, HANDLE, VOID, то есть, в разных контекстах разная интерпретация. Вот поэтому BOOL тоже 4хбайтный.
Логично установить разрядность bool равной машинному "слову", а не байту, например. За счет этого повысится скорость операций с этим типом данных.
Чувак, это Microsoft. Расслабься и попытайся получить удовольствие :)
В ассемблере есть такое понятие как выравнивание.
Суть в том, что если переменные располагать по адресам кратным 4, то скорость доступа к ним увеличивается. Ну, такая аппаратная фишка.
Как ни странно, при различных настройках компилятора работа с типами "меньшей разрядности" производится быстрее, несмотря на выравнивание и пр. Видимо не все так просто, и нужно смотреть скомпилированный код, что туда компилятор добавляет от себя.
Как видно, это не тип данных языка, а целое число.
Ранее в С++ не было типа bool, и его моделировали макросами или такими typedef'ами.
Кстати из определения не ясно, что размер 4-байтовый.
Всё ещё хуже. В 64битных виндах появился костыль по имени BOOL_PTR. он соответственно 64 бита. Дело в том что например функция обработчик сообщений диалога должна возвращать TRUE или FALSE в зависимости от того обработала она это сообщение или нет. Кроме того на некоторые сообщения (например на WM_CTLCOLORDLG) она должна выдавать указатель на кисть (HBRUSH)
Вот в результате и получается, что возвращаемое значение это TRUE FALSE или HBRUSH (который 32 или 64 битный)


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.