考虑以下一段 C 代码 -
char sum_char(char a,char b)
{
char c = a+b;
return c;
}
它涉及 -
- 将第二个参数转换为符号扩展。
- 将签名的扩展参数作为 b 推送到堆栈上。
- 将第一个参数转换为符号扩展。
- 将签名的扩展参数作为 a 推送到堆栈上。
- 添加 a & b,将结果转换为 char 并将其存储在 c 中。
- C 再次符号扩展。
- 符号扩展 c 被复制到返回值寄存器和函数返回给调用者。
- 要存储结果调用函数再次将 int 转换为 char。
我的问题是——
- 这是谁做的?
- 做这么多转换的必要性是什么?
- 它会降低/提高机器/编译器的性能吗?
- 如果它正在降低性能,我们应该怎么做才能提高它?