Blocks y stack

Sé que los bloques se crean en la pila. Sin embargo, dado que no tengo suficiente conocimiento sobre la pila y las variables locales, no puedo entender por qué debería mover el bloque al montón para obtener el resultado esperado. Intuitivamente, siento que el fragmento de código de bloque tiene solo 1 instancia en la pila, este código hace referencia a la variable locali 3 veces. Si lo copio al montón, tendrá 3 instancias diferentes y cada vez capturará 3 valores diferentes dei durante el procedimiento de copia. Pero realmente me gustaría saber más sobre el código de bloque en la pila, el montón y las referencias a variables locales.

for (int i=0; i<3; i++)
    b[i] = ^{ return i;};
for (int i=0; i<3; i++)
    printf("b %d\n", b[i]());

Respuestas a la pregunta(1)

Su respuesta a la pregunta