将int乘以double多少内存?

时间:2019-05-26 14:20:43

标签: c memory

将16位无符号整数乘以double并将其分配给另一个无符号16位整数需要多少内存?在将双精度结果赋给int之前,是否会暂时将其复制到寄存器中?我正在为嵌入式系统做一些编程,这就是我要问的原因。

u16int_t a = 3;
u16int_t b = a * .4;

2 个答案:

答案 0 :(得分:4)

计算本身仅使用很少的内存,因为在此特定代码段中根本没有内存,因此可以在编译时计算结果。

通常,如果代码片段是软件中唯一使用浮点算术的位置,则根据实际的嵌入式系统特性,代码片段可能会导致运行时库代码被链接以支持浮点,这可能会等于将几千字节的代码添加到了二进制文件中。

为避免这种情况,您可以使用整数算术:

u16int_t a = 3;
u16int_t b = a * 4 / 10;

答案 1 :(得分:3)

运行2 * {sizeof(double)进行查找。该代码需要一个临时变量来存储(double)a作为隐式强制转换,另一个需要临时存储.4。通常,会有两个可用的免费寄存器,而实际成本为零,但可能没有。

请注意,此内存是在堆栈上分配的,因此该内存的有效成本可能为零。编译器确实善于重用临时内存插槽,这不可能是您最深的堆栈深度所在的地方。

如果u16int_t a = 3确实是一段恒定的代码,而不是减少的工件,则编译器会将整个内容优化为u16int_t b = floating point constant,并再次为乘法分配零字节。