[linux-audio-dev] soft synth as a plugin

Stefan Nitschke stefan_nitschke at hotmail.com
Fri Oct 18 14:51:01 UTC 2002


>
>erm, sorry, but why not use pointers?
>

Just out of couriosity i made a benchmark test between C and C++ with
gcc3. I dont have a clue abour x86 assembler so i made a measurement.

Here is the C code (not realy useful as real code would have a need for a
struct and a pointer operation to call the filter() function) and the
C++ code.
Both "simulate" a low pass filter and are compiled with:
  gcc -O2 -march=pentium -o filter filter.xx

-O3 with C is broken, i got an endless loop!
---------
double x1,y1,a,b;

const double filter(const double x)
{
  register double y;
  y  = a*(x + x1) - b*y1;
  x1  = x;
  y1  = y;
  return y;
}

int main()
{
  double x=1;
  int i;
  x1 = y1 = 0;
  a  = b  = 0.5;
  for (i=0; i<1000000000; ++i) {
	x = filter(x);
  }
}
---------
class LowPass {
public:
  LowPass() { x1 = y1 = 0; a = b = 0.5; };
  ~LowPass() {};
  const double filter(const double x);
private:
  double x1,y1,a,b;
};
inline const double LowPass::filter(const double x)
{
  register double y;
  y  = a*(x + x1) - b*y1;
  x1  = x;
  y1  = y;
  return y;
}

int main()
{
  //LowPass* LP = new LowPass();
  LowPass LP;
  double  x=1;

  for (int i=0; i<1000000000; ++i) {
	//x = LP->filter(x);
	x = LP.filter(x);
  }
}
---------

The results on my AthlonXP machine are:

C++ with member:
real    0m11.847s
user    0m11.850s
sys     0m0.000s

C++ with new() and pointer:
real    0m12.337s
user    0m12.330s
sys     0m0.000s

C:
real    0m16.673s
user    0m16.670s
sys     0m0.000s


Well, i will stay with pointer less C++ :-)

- Stefan



_________________________________________________________________
Surf the Web without missing calls! Get MSN Broadband. 
http://resourcecenter.msn.com/access/plans/freeactivation.asp




More information about the Linux-audio-dev mailing list