【发布时间】:2015-11-29 18:04:54
【问题描述】:
我向我的一位同事发表了声明,内容是:
“在 C 表达式中,字符会自动提升为整数,这对性能来说很好,因为 CPU 在其自然字长下运行速度最快。
我相信由于 char 的等级,char 提升行为在标准中的某处进行了说明。
这是我得到的回复:
"字符不默认提升为整数。寄存器大小 是 32 位的,但是可以将一行中的多个字节值打包成一个 单个寄存器作为编译器实现。这并不总是 预测性的。您唯一可以验证自动促销的时间是 类型在未包裹时传递到调用堆栈 结构,因为 C 标准正式需要 32 位值 调用栈内存。大量CPU架构已经优化 汇编要求非 32 位值,因此不能做出任何假设 关于这种情况下的 CPU 或编译器。”
我不确定谁是对的,以及该相信什么。事实如何?
【问题讨论】:
-
因为 C 标准官方需要调用栈内存中的 32 位值谁说的?!
-
这种“C 标准正式需要调用堆栈内存中的 32 位值”的说法完全是 BS。 C标准没有提到位数。它甚至没有谈论堆栈。
-
您的同事似乎在使用“registry”这个词,而他的意思似乎是“注册”。注册表是 Windows 操作系统的一项功能,而不是 CPU。
-
@EugeneSh。事实上,C11 标准中根本没有出现字栈。
-
@RedAlert:
chars 在传递给没有原型的函数、可变参数函数或具有char以外原型的函数时也会被转换:C11 草案标准,@ 987654323@.
标签: c++ c char int integer-promotion