为什么访问我的结构会减慢我的方法执行速度

时间:2011-11-04 16:01:38

标签: c core-audio

我在核心音频回调中经常调用一个函数来将eq应用于我的音频样本。我在仪器时间曲线测量的这种方法中有非常奇怪的性能结果。

我做了3次测试。第一个调用函数,只返回一个零值。 仪器报告为 1%

inline AudioUnitSampleType LowPassProcess (struct EQEffect *obj , AudioUnitSampleType input)
{
return 0;
}

第二个测试实际上是通过访问包含eq参数的结构来在函数中进行EQ计算。

执行此工具时,会将其报告为 * 40 *!

struct globaldata

    {
        float cutoff;
        float fs;
        float f;
        float q;
        float scale;

        AudioUnitSampleType low;
        AudioUnitSampleType high;
        AudioUnitSampleType band;
        AudioUnitSampleType notch;
    };



struct globaldata global;

inline AudioUnitSampleType LowPassProcess (struct EQEffect *obj , AudioUnitSampleType input)
{

    global.low= global.low + (global.f * global.band);
    global.high= global.scale * input -global.low - global.q * global.band;
    global.band = global.f * global.high +global.band;
    global.notch = global.high + global.low;

    return global.low;

};

最后我尝试再次调用该函数,但在这种情况下不访问EQ结构但仍执行相同数量的计算。

执行此工具时,报告为 7%

struct globaldata

        {
            float cutoff;
            float fs;
            float f;
            float q;
            float scale;

            AudioUnitSampleType low;
            AudioUnitSampleType high;
            AudioUnitSampleType band;
            AudioUnitSampleType notch;
        };


    struct globaldata global;

inline AudioUnitSampleType LowPassProcess (struct EQEffect *obj , AudioUnitSampleType input)
{


    float x =10+(50*8);
    float y = ((10 *5) -50)- (6*40);
    float z=10 *(6+9);
    float j=60+0;


    return 0;

};

所以我的问题是为什么当我对struct成员执行计算时,我的函数花费的时间长达5倍,而当我只是对变量进行计算时,花费的时间要少得多?

2 个答案:

答案 0 :(得分:1)

我猜测编译器会优化你的常量计算。

在任何情况下,请记住,如果它仍然足够快(如果常量计算需要7%),那么如果某些东西需要40%并不重要。 =)

答案 1 :(得分:0)

因为在你的第一个和第三个代码示例中, nothing 正在执行 - 第一个是故意为空,第三个由编译器优化,因为你没有访问任何内存而没有使用结果计算(顺便说一下,它们都是编译时常量)。