我在某处读到使用 BOOL (typedef int) 比使用标准 c++ 类型 bool 更好,因为 BOOL 的大小是 4 个字节(即 4 的倍数),并且它将变量的对齐操作保存到寄存器或类似的东西中。 .
有没有道理呢?我想即使您使用 bool(1 字节),编译器也会填充堆栈帧以保持 4 的倍数对齐?
我绝不是对齐、寄存器等基本工作原理的专家,所以如果我完全错了,我提前道歉。我希望得到纠正。:)
干杯!
我在某处读到使用 BOOL (typedef int) 比使用标准 c++ 类型 bool 更好,因为 BOOL 的大小是 4 个字节(即 4 的倍数),并且它将变量的对齐操作保存到寄存器或类似的东西中。 .
有没有道理呢?我想即使您使用 bool(1 字节),编译器也会填充堆栈帧以保持 4 的倍数对齐?
我绝不是对齐、寄存器等基本工作原理的专家,所以如果我完全错了,我提前道歉。我希望得到纠正。:)
干杯!
首先,sizeof(bool)
不一定1
。它是实现定义的,让编译器编写者可以自由选择适合目标平台的大小。
另外,sizeof(int)
也不一定4
。
有多个问题可能会影响性能:
对特定代码段的影响(如果有的话)只能通过分析该段代码来确定。
您可以在 C++ 中获得的唯一保证大小是 with 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
。在重载函数和编写模板时请记住这一点。
关于布尔值,有三种普遍接受的性能驱动实践:
但是,我从未听说过用(无符号?)整数替换布尔值会带来任何性能提升。