gpt4 book ai didi

c - 就地乘法子例程 - 传递指针或值?

转载 作者:行者123 更新时间:2023-11-30 15:00:12 24 4
gpt4 key购买 nike

我需要执行一个子例程,将两个数字相乘并移动最终结果。

哪个子程序更合适:

void mul_inplace_both_pointers(q23* inout, q23* in)
{
*inout = (*inout * *in);
*inout = *inout << 8;
}

void mul_inplace_one_pointer(q23* inout, q23 in)
{
*inout = (*inout * in);
*inout = *inout << 8;
}

q23 mul_no_pointers(q23 in1, q23 in2)
{
q23 out;
out = in1 * in2;
out = out << 8;
return out;
}

该代码在 DSP 处理器上运行,因此应该对速度和大小进行优化。

q23 a;
q23 b;

mul_inplace_both_pointers( &a, &b);
mul_inplace_one_pointer ( &a, b);
a = mul_inplace_no_pointers ( a, b);

我可以暂时忽略速度和大小要求,只问从程序员的角度来看什么是最合适的?

最佳答案

根据经验,我会尽可能减少传递给函数的指针数量。如果(1)需要更改(指向的)参数的值,或者(2)按值传递涉及到对程序的工作而言非常重要的开销(例如,一个非常大的变量),那么这将导致仅传递指针数据结构)。

因此,如果您必须使用类似于 mul_inplace_XXX() 风格的函数,我可能会选择 mul_inplace_one_pointer() 函数...

在您的特定情况下 - 取决于 ae_q23 是什么,我根本不会使用函数。我会简单地做

  inout *= in;
inout <<= 8;

在表面上的调用者中。或者,需要经过测试;

  inout = (inout * in) << 8;

显然,我假设没有任何操作会引入未定义或其他(可能)意外的行为。

就性能而言,很少有绝对的保证。当然,要在您的目标平台上进行测试和分析。尝试在不进行测试/分析的情况下进行优化被称为“过早优化”,原因有几个 - 最值得注意的是,您精心手工编写的代码实际上可能并不是按您预期的措施优化的。

关于c - 就地乘法子例程 - 传递指针或值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42269554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com