return to first page linux journal archive
keywordscontents

Listing 2. C++ Benchmark Source Code

#include
#include
#include

const int NOBJECTS = 500000;

class PerfTest
{
public:
     PerfTest ();
     void addAmount (int val);
     int getAmount ();
private:
     int amount;
};

PerfTest::PerfTest ()
{
     amount = 0;
}

void PerfTest::addAmount (int val)
{
     amount += val;
}

int PerfTest::getAmount ()
{
     return amount;
}

void reportResult (struct timeval* tstart, struct timeval* tend);

/*
 *  C++ version of the test driver.
 *  Creates half a million simple account objects, adds an amount
 *  to each one, and then adds up the amounts in all accounts.
 *  Reports elapsed time in milliseconds and number of objects
 *  processed per millisecond.
 */
void main (int argc, char** argv)
{
     PerfTest* ptarr[NOBJECTS];
     struct timeval tval_start;
     struct timeval tval_end;
     struct timezone tzone;
     int sum = 0;
     int i = 0;

     gettimeofday (&tval_start, &tzone);

     for (i = 0; i < NOBJECTS; i++)
             ptarr[i] = new PerfTest;

     for (i = 0; i < NOBJECTS; i++)
             ptarr[i]->addAmount(i);

     for (i = 0; i < NOBJECTS; i++)
             sum += ptarr[i]->getAmount();

     gettimeofday (&tval_end, &tzone);

     reportResult (&tval_start, &tval_end);
}

/*
 *  Helper function to report results.
 */
void reportResult (struct timeval* tstart, struct timeval* tend)
{
     int start_ms = (tstart->tv_sec * 1000) +
     (tstart->tv_usec / 1000);
     int end_ms = (tend->tv_sec * 1000) +
     (tend->tv_usec / 1000);

     cout << "Elapsed time in milliseconds for "
     << NOBJECTS << " objects:  " <<
     (end_ms - start_ms) << "\n";
     cout << "Objects per millisecond:  "  <<
     (NOBJECTS / (end_ms - start_ms)) << "\n";
}