Delegate Memory Usage & Optimization

Manu turkeyman at gmail.com
Wed Dec 11 20:06:30 PST 2013


On 12 December 2013 13:45, Maxime Chevalier-Boisvert <
maximechevalierb at gmail.com> wrote:

> It only allocates a closure if (1) it thinks the delegate may escape the
>> scope and (2) uplevel references are used in the delegate.
>>
>
> The delegate will escape the enclosing scope. I'm wondering if there will
> still be some kind of scope object allocated to represent escaping values
> in the englobing stack frame, even when there are no escaping values.
>
> I don't mind paying the small cost of an extraneous null context pointer,
> but having a whole unnecessary context object allocated seems wasteful.


If you have no use for the context pointer, then it sounds like what you
want is a function pointer, not a delegate.

A delegate is just a function-ptr+context-ptr pair, it is a trivial struct
that is passed by value, the same as a dynamic array. The context pointer
may be to a stack frame (in case of a closure), or a class object (in the
case of a class method pointer).
If you intend a null context pointer (ie, function doesn't reference any
state), than what you really have is a function pointer, not a delegate.
You should use a function pointer instead.

Can you show your usage?

 I strongly suggest trying out a couple examples, and disassembling the
>> result to confirm.
>>
>
> I'll look into that.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20131212/4ef782af/attachment-0001.html>


More information about the Digitalmars-d mailing list