тривиальный пример программы:
#include <stdio.h>
main()
{
bool tim = true;
bool rob = false;
bool mike = true;
printf("%d, %d, %d\n", tim, rob, mike);
}
Используя компилятор gcc, на основе просмотра вывода сборки появляется, что каждое логическое значение хранится как бит в отдельных байтах:
0x4004fc <main()+8> movb $0x1,-0x3(%rbp)
0x400500 <main()+12> movb $0x0,-0x2(%rbp)
0x400504 <main()+16> movb $0x1,-0x1(%rbp)
если, однако, включить оптимизацию, существует ли уровень оптимизации, который заставит gcc хранить эти логические значения как биты в байте, или нужно будет поместить логические значения в объединение некоторых логических значений и короткого целого? Другие компиляторы? Я пробовал '-Os', но должен признать, что не могу разобраться в дизассемблированном выводе.
bool
. - person   schedule 26.07.2013