Well, from what I read (and if I really really recall correctly) dw2 has a higher performance than sjlj when no exceptions occur, but it's slower for stack unwinding. I think it's OK if it's a bit slower when an exception is thrown. After all, exceptions don't occur that often in regular code, but code that could throw exceptions is constantly being called. Just to give you an example, consider std::string. Since it does dynamic allocation, it uses the new operator which must throw an exception if not enough memory can be acquired (unless an implementation decided to use the nothrow version of it, or malloc, or something else). In most cases your program will run without problems, even if it does a lot of string manipulation. From my personal experience, I was writing a parser some months ago, and I was using std::string (yes, I'm continuing the example). Profiling that code shown that somewhere between 20% and 25% of the time was spent (or if you prefer "wasted") in sjlj stuff that was never used. I wish I had had the opportunity to test the same code using dw2, but I didn't have the compiler to do that neither I knew about dw2.
Oh, and just before you ask: the current CodeCompletion plugin uses wxString, which uses malloc. If you feel it's running faster, I'd bet it's just a "placebo effect".