> On Jun 15, 2018, at 9:16 AM, Derek Atkins <warl...@mit.edu> wrote:
> 
> John Ralls <jra...@ceridwen.us> writes:
> 
>> A very good catch indeed. But pre-constructing the string in
>> qofbook.cpp only saves two string constructions per invocation as the
>> vector still has to make its own copies. I guess that its much worse
>> for you because the ancient gcc on Ubuntu 14.04 (gcc4.8) doesn't do
>> small-string optimization.
> 
> Is there any reason we cant use std::string& in the vector?  Or do we
> think that we might lose references there?
> 

In this instance the string is static so it would be safe to use const 
std::string&, but while there's an is_volatile type trait there's no is_static 
so we can't insert a static assert to catch cases where the actual std::string 
is on the stack. That could lead to some ugly bugs.

Besides, using strings is still leaving performance on the table: A string 
comparison is n times longer than an int comparison where n is the number of 
consecutive leading characters that are the same in the two strings. I got a 
huge speedup on loading a few months ago because GncGUID's operator==() was 
doing a character-wise comparison of the ascii representation instead of 
comparing the two int64_ts of the actual GUID.

Regards,
John Ralls

_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to