Anybody may help to explain the issue of the source code , next "try-throw-catch" will cost more cpu time than previous one
Andrew Haley
aph@redhat.com
Thu Jan 1 16:57:00 GMT 2009
f z wrote:
> Happy New Year! Haley,
And a Happy New Year to you.
> Thanks for your help!
>
> In your result , there isn't any variation in the time taken.
>
> My test code can be like this :
>
> while(1){
> try_throw_catch_block(0); // it takes about 133xxxxx every time
> try_throw_catch_block(1); // it takes about 148xxxxx every time
> try_throw_catch_block(2); // it takes about 158xxxxx every time
> try_throw_catch_block(3); // it takes about 172xxxxx every time
> }
> In my opinion , next "try_throw_catch" in writing order will takes more cpu time than the previous one.
>
> Then , I will use oprofile to check it.
Yes, I see the same result as you.
I think I might know what is happening. When a throw is caught, there
is a search for the catch region.
_Unwind_IteratePhdrCallback searches for the eh_frame that contains
the PC we're looking for. There is a binary search for the catch
region. Like all binary searches, this is not constant time, so I
suspect that's what we're seeing.
Andrew.
More information about the Gcc-help
mailing list