struct vs class benchmark (was Re: Give struct the status it deserves)

Hasan Aljudy hasan.aljudy at gmail.com
Mon Mar 27 12:29:12 PST 2006


Heheh, how funny!

Dude, you're re-iterating my point exactly.

I was *not* trying to prove that classes are faster than structs; I was 
just proving that the example is flawed, by providing a similarily 
flawed example!!

Rioshin an'Harthen wrote:
> [sorry, couldn't resist :P]
> 
> "Hasan Aljudy" <hasan.aljudy at gmail.com> wrote:
>> Heh, this is so flawed.
>>
>> it's got nothing to do with classes vs. structs.
>>
>> The benchmark is designed so that the struct version runs faster than the 
>> class version.
>>
>> change the class version to:
>>
>> Point p = new Point();
>> for (uint i = 0; i < n; ++i)
>> { Point.count += p.x;
>> // delete p;
>> }
>>
>> and the struct version to:
>>
>> for (uint i = 0; i < n; ++i)
>> {
>> Point * p = new Point();
>> Point.count += p.x;
>> }
>>
>> These programs don't logically do anything different. However, the class 
>> version now runs much much faster than the struct version.
> 
> Heh, this is so flawed.
> 
> The benchmark is designed so that the class version runs faster than the 
> struct version.
> 
> change class version to:
> 
> for (uint i = 0; i < n; ++i)
> {
> Point p = new Point();
> Point.count += p.x;
> // delete p;
> }
> 
> and the struct version to:
> 
> Point p;
> for (uint i = 0; i < n; ++i)
> {
> Point.count += p.x;
> }
> 
>> on my machine:
>>> class
>> 100000000
>> operation took 0 m 0.25 s
>>
>>> struct
>> 100000000
>> operation took 0 m 15.265 s
> 
> on my machine:
>> class
> 100000000
> operation took 0 m 43.594 s
> 
>> struct
> 100000000
> operation took 0 m 0.218 s
> 
>> Try to come up with a more realistic example, and optamize both versions. 
>> This way, you can prove that it's the class vs. struct issue and not an 
>> optimization issue.
> 
> Maybe you should try to come up with a more realistic example, and optimize 
> both. Now you optimized the class version, but not the struct version. It's 
> easy to claim classes as faster when you selectively optimize one and not 
> the other.
> 
> I intentionally optimized the other way around. If your "optimization" 
> proves classes are faster, then mine proves structs are faster. And the code 
> is still the same - there's no logical difference in how they work (except 
> for garbage collecting much more in the class version, as you had in the 
> struct version).
> 
> To be sure, if both are optimized:
> 
> // struct
> Point p;
> for (uint i = 0; i < n; ++i)
> {
> p.count += p.x;
> }
> 
> // class
> Point p = new Point();
> for (uint i = 0; i < n; ++i)
> {
> p.count += p.x;
> // delete p;
> }
> 
> the times for the class version change to:
> 
>> class
> 100000000
> operation took 0 m 0.25 s
> 
> which is equivalent with the 0.218 s it took for the struct version.
> 
> If you want to prove classes faster than structs, please don't go about it 
> optimizing only the class version and not the struct one. Otherwise, you end 
> up looking like a fool. 
> 
> 



More information about the Digitalmars-d mailing list