Heap fucntion calls

deadalnix deadalnix at gmail.com
Wed Sep 21 15:43:09 PDT 2011


Great answer ! Thank you very much, it answered almost everything !

But what about, in the exemple you gave me (which is great by the way) 
if foo as parameters ? Those parameters are passed on the stack by copy 
to the function, and then, copied to the heap (resulting in two copies) ?

Le 21/09/2011 19:56, Simen Kjaeraas a écrit :
> void foo() {
> int x = 5;
> auto dg = () {x = 4;}
> dg();
> }
>
> is roughly equivalent to:
>
> typedef struct foo_dg_1_delegate {
> void (*funcptr)(struct foo_dg_1_context*);
> void* ptr;
> };
>
> typedef struct foo_dg_1_context {
> int x;
> };
>
> void foo_dg_1(struct foo_dg_1_context* ctx) {
> ctx->x = 4;
> }
>
> void foo(void) {
> struct foo_dg_1_delegate dg;
> struct foo_dg_1_context* ctx = (struct
> foo_dg_1_context*)malloc(sizeof(struct foo_dg_1_context));
> dg.funcptr = &foo_dg_1;
> dg.ptr = ctx;
> ctx->x = 5;
> dg.funcptr(dg.ptr);
> }
>



More information about the Digitalmars-d-learn mailing list