On Sunday, April 15, 2012 04:21:09 Joseph Rushton Wakeling wrote: > On 14/04/12 23:03, q66 wrote: > > He also uses a class. And -noboundscheck should be automatically induced > > by > > -release. > > ... but the methods are marked as final -- shouldn't that substantially > reduce any speed hit from using class instead of struct?
In theory. If they don't override anything, then that signals to the compiler that they don't need to be virtual, in which case, they _shouldn't_ be virtual, but that's up to the compiler to optimize, and I don't know how good it is about that right now. Certainly, if you had code like class C { final int foo() { return 42;} } and benchmarking showed that it was the same speed as class C { int foo() { return 42;} } when compiled with -O and -inline, then I'd submit a bug report (maybe an enhancement request?) on the compiler failing to make final functions non- virtual. Also, if the function is doing enough work, then whether it's virtual or not really doesn't make any difference, because the function itself costs so much more than the extra cost of the virtual function call. - Jonathan M Davis