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)
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
Pourquoi aurait-il besoin de recompiler la fonction? Une allocation de pile requiert uniquement que le pointeur de pile soit déplacé. –
@leppie hmm, et qu'en est-il d'un tampon plus grand que cette taille de pile réservée? ; x – ptr0x