2016-05-14 4 views
4

Une idée de pourquoi le mot-clé 'stackalloc' accepte une longueur variable?Pourquoi stackalloc accepte une longueur variable?

Si cette instruction renvoie un pointeur vers un tampon alloué dans le cadre de la pile, comment le compilateur gère-t-il cela? Il recompile la fonction à l'exécution chaque fois qu'il est appelé pour organiser le cadre de la pile?

Merci.

+0

Intéressant, mais Je suppose que le JIT va juste allouer à la volée étant donné qu'il y a une taille de pile réservée minimale (IIRC). – leppie

+0

Pourquoi aurait-il besoin de recompiler la fonction? Une allocation de pile requiert uniquement que le pointeur de pile soit déplacé. –

+0

@leppie hmm, et qu'en est-il d'un tampon plus grand que cette taille de pile réservée? ; x – ptr0x

Répondre

5

Une idée pourquoi le mot clé stackalloc accepte une longueur variable?

Parce qu'il est utile et souhaitable de pouvoir le faire, et donc les concepteurs de langage choisi pour le permettre.

Si cette instruction renvoie un pointeur vers un tampon alloué dans le cadre de la pile, comment le compilateur gère-t-il cela? Il recompile la fonction à l'exécution chaque fois qu'il est appelé pour organiser le cadre de la pile?

L'instruction localalloc alloue la mémoire après le cadre de pile en cours, et l'affectation juste stocke l'adresse de retour dans votre local. Par conséquent: il n'est pas nécessaire de recalculer quoi que ce soit, sauf pour mettre à jour la fin de la pile-frame afin qu'elle ne soit pas écrasée si on appelle une autre méthode.

(note: comme d'habitude lors de l'examen de la pile, c'est en fait un détail de mise en œuvre, le JIT est en théorie libre de le faire allouer de partout où il veut tant qu'il respecte la sémantique)