Linked by Thom Holwerda on Tue 13th Oct 2009 18:24 UTC, submitted by Lazarus
FreeBSD Not too long ago, Apple open sourced its Grand Central Dispatch library, which aids in developing multithreaded code. It was suggested that it could be ported to other platforms, and the FreeBSD team has done exactly that. They have also done a lot of work related to getting GCD to work in a POSIX environment.
Permalink for comment 389109
To read all comments associated with this story, please click here.
RE[5]: Neato
by Lunix on Wed 14th Oct 2009 05:12 UTC in reply to "RE[4]: Neato"
Lunix
Member since:
2009-10-14

Theres plenty of info here:
http://clang.llvm.org/docs/BlockImplementation.txt
http://clang.llvm.org/docs/BlockLanguageSpec.txt


Aside from the closure structure, there's a second structure for __block variables (which are shared and mutable). There may also code generated for calling c++ copy constructors/destructors and Objective C retain/release-ing.

Blocks are never magically moved from the stack to the heap. There are two runtime function calls -- Block_copy(block) and Block_destroy(block) -- for managing block lifetime. (Objective C people can use [block copy] / [block release]).

If the block is stored on the stack, Block_copy will copy it to the heap (and return a pointer to the new heap block). Otherwise, it just increments a reference counter.

If you pass your block to a function that keeps it around for later, then it will get copied to the heap (if necessary). C is not doing anything behind your back, though.

Edited 2009-10-14 05:14 UTC

Reply Parent Score: 3