This code executes in a strange way: SubClass takes much longer than BaseClass.

class BaseClass
{
        let hugeNumber: Int
        var bitfield: UnsafeMutablePointer<UInt8> 

        init()
        {
                hugeNumber = 1_000_000_000
                bitfield = calloc( hugeNumber, 1)
        }

        function doSomething()
        {
                for index = 0 to hugeNumber step 2      //      pseudo code
                {
                        self.dynamicType.setBitFieldAtIndex(index)
                }
        }

        class function  setBitFieldAtIndex( index: Int ) 
        {
                bitfield[index] = 5
        }
}

final SubClass: BaseClass
{
        override function doSomething()
        {
                for index = 0 to hugeNumber step 3      //      pseudo code
                {
                        self.dynamicType.setBitFieldAtIndex(index)
                }
        }
}

One assumes that SubClass is faster: it should take about 2/3 the time of 
BaseClass. But this is NOT the case.

Instruments Time Profiler shows (total time, % of time, self time, name of 
function):

BaseClass       (does NOT override doSomething)
        5743 ms  92.0%  644                     doSomething                     
Instruments shows only Assembly code
                5099 ms  81.7% 4644                     setBitFieldAtIndex      
 

SubClass        (overrides doSomething)
        8407 ms 92.6% 186                       doSomething                     
Instruments can show Swift code
                2693 29.6% 2576                                 
setBitFieldAtIndex              this about expected
                2746 29.1% 2643                         swift_retain  
(_swift::HeapObject)      BAD
                2643 29.1% 2643                         swift_release 
(_swift::HeapObject)      BAD

I guess that in BaseClass doSomething gets inlined and the compiler knows that 
retain/release is not needed.

So: How can I convince the compiler not to use retain/release in SubClass?

Gerriet.



_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to