next up previous contents
Next: Heap Allocation Up: Performance Tuning Previous: Performance Tuning   Contents

Algorithm

The most important factor in getting good performance is understanding the run-time efficiency of the algorithms you are calling (and writing). This document makes an effort to give the run-time efficiency for various functions but you are encouraged to take a look at Str.cpp and get an understanding of things yourself. This is a deep subject in that many algorithms performs well on smaller sets of data, but not larger, and vise-versa.

As an example, the lstrip() command removes whitespace at the beginning of a string. Here is an example that uses lstrip() to check for a // as the first non-whitespace at the start of a string:

lstrip(x);
bool comment = x.startsWith("//");

Due to string structure, this will involve doing a memmove of string contents to remove the whitespace gap. On a larger string, this could be slow.

There are a number of ways to do get the same answer as the code above while avoiding the memmove. For example, you could use the (const char*) conversion function and do the check yourself:

  const char* cstr = (const char*)x;
  while ((*cstr == ' ') || (*cstr == '\t')) ++cstr;
  bool comment = (*cstr == '/') && (*(cstr+1) == '/');

Now the routine will probably run faster if there is a large amount of text behind the first non-whitespace character. Things are not so simple though. For starters, the code took a large readability hit. Even if I took the time to comment the above code well, its still tougher to read. Another problem is that the chances of having a bug in the second code is higher. Finally, if we had more whitespace characters in our set than just space or tab, the simple if || testing line would start eating into the performance. The lstrip() function handles the same situation much better (look at the code if you are curious as to how).


next up previous contents
Next: Heap Allocation Up: Performance Tuning Previous: Performance Tuning   Contents
2007-05-05