Hunting for performance regressions in libstdc++
Howard Hinnant
hinnant@twcny.rr.com
Fri Jun 17 19:42:00 GMT 2005
On Jun 17, 2005, at 2:30 PM, Paolo Carlini wrote:
> Howard Hinnant wrote:
>
>> [snip]
>>
>> Note that the behavior of "adjacent" semantics is allowed but not
>> required by the proposed wording in N1780. This allows a nice
>> migration path from "after" semantics. You can implement "before"
>> semantics today but still check "after" and remain backwards
>> compatible indefinitely.
>
> Ok, I think my only remaining doubt is the following (don't know if you
> want to help to clarify this point, not really part of DR 233 ;)
> AFAICS,
> in case of map/set things seem less efficient, the worst case being *3*
> comparisons. That is, x < *p, then, if it fails, *p < x and x < *(p +
> 1). Or?!?
The current standard has "after" semantics which costs 2 comparisons
assuming a good hint.
The current resolution to lwg 233:
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#233
proposes "adjacent" semantics which would cost 2 to 3 comparisons
assuming a good hint (i.e. you must check before and after).
N1780 proposes "before" semantics which would cost 2 comparisons
assuming a good hint.
With either "before" or "after" semantics, the vendor is free to spend
1 more comparison to implement "adjacent" semantics. This may or may
not be more expensive for the client. That 1 more comparison might
save an additional Log N comparisons (or it might not). It is a
gamble. The current resolution to lwg 233 mandates that gamble.
-Howard
More information about the Libstdc++
mailing list