Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!julius.cs.uiuc.edu!news.cs.indiana.edu!shirley@iuvax.cs.indiana.edu From: shirley@iuvax.cs.indiana.edu (peter shirley) Newsgroups: comp.lang.c++ Subject: why is this program slow? Message-ID: <1991Jan9.002244.23398@news.cs.indiana.edu> Date: 9 Jan 91 05:22:13 GMT Organization: Computer Science, Indiana University Lines: 115 I have a C++ program that takes about 170% as long as a similar C program. I've run it on a vax and a sun with and without big-O. I've inlined everything I can, and I don't understand the slowdown. Could someone enlighten me? (yes, I looked at the C code generated by CC, and am too dumb to understand it). The C, then C++ code follow. Thanks, Pete Shirley shirley@cs.indiana.edu **************** begin C code ********************* #include "stdio.h" main() { int i; double a[3], b[3]; a[0] = a[1] = a[2] = 0.0; b[0] = 1.0; b[1] = 2.0; b[2] = 4.0; for ( i = 0; i < 1000000; i++) { a[0] = a[0] + b[0]; a[1] = a[1] + b[1]; a[2] = a[2] + b[2]; } fprintf(stderr, "%lf %lf %lf\n", a[0], a[1], a[2]); } ************* end C code ******************* ************** begin C++ code ********************* #include #include class vector { protected: double data[3]; public: vector(); vector(double, double, double); void set(double, double, double); void operator=(vector&); friend ostream& operator<<(ostream&, vector&); friend vector operator+(vector&, vector&); }; inline vector::vector() { } inline vector::vector(double a, double b, double c) { data[0] = a; data[1] = b; data[2] = c; } inline void vector::set(double a, double b, double c) { data[0] = a; data[1] = b; data[2] = c; } inline void vector::operator=(vector& v) { data[0] = v.data[0]; data[1] = v.data[1]; data[2] = v.data[2]; } inline vector operator+(vector& u, vector& v) { vector temp; temp.data[0] = u.data[0] + v.data[0]; temp.data[1] = u.data[1] + v.data[1]; temp.data[2] = u.data[2] + v.data[2]; return temp; } inline ostream& operator<<(ostream& s, vector& t) { return s << "(" << t.data[0] << ", "<< t.data[1] <<", " << t.data[2] <<")"; } main() { vector a(0.0, 0.0, 0.0); vector b(1.0, 2.0, 4.0); for (int i = 0; i < 1000000; i++) a = a + b; cerr << a << "\n"; } ************** end C++ code ***********************