我在某处读到使用BOOL(typedef int)比使用标准c ++类型bool更好,因为BOOL的大小是4个字节(即4的倍数)并且它将变量的对齐操作保存到寄存器或其他东西中线...
这有什么道理吗?我想编译器会填充堆栈帧,以便即使你使用bool(1个字节)也能保持多个4的对齐?
我绝不是对齐,寄存器等基础工作的专家,所以如果我完全错了,我会提前道歉。我希望得到纠正。 :)
干杯!
答案 0 :(得分:7)
首先,sizeof(bool)
不一定是1
。它是implementation-defined,使编译器编写者可以自由选择适合目标平台的大小。
此外,sizeof(int)
不一定是4
。
有多个问题可能会影响效果:
什么 - 如果有的话 - 只能通过分析那段代码来建立对特定代码片段的差异。
答案 1 :(得分:2)
您可以在C ++中获得的唯一保证大小是char
,unsigned char
和signed char
2),它们始终只是一个字节并已定义对于每个平台。 0) 1)
0)虽然一个字节没有定义的大小。 sizeof(char)
始终为1 byte
,但实际上可能是40个二进制位
1)是的,有uint32_t
和朋友,但不,他们的定义对于实际的C ++实现是可选的。使用它们,但如果它们不可用,您可能会遇到编译时错误(编译时错误总是很好)
2)char
,unsigned char
和signed char
是不同的类型,并且未定义char
是否为signed
。在重载函数和编写模板时请记住这一点。
答案 2 :(得分:0)
关于布尔值,有三种普遍接受的绩效驱动实践:
然而,我从来没有听说过使用(unsigned?)整数替换布尔值会带来任何性能提升。