Почему stackalloc принимает переменную длину?

Есть идеи, почему ключевое слово stackalloc принимает переменную длину?

Если эта инструкция возвращает указатель на буфер, выделенный в кадре стека, как компилятор управляет этим? Он перекомпилирует функцию во время выполнения каждый раз, когда она вызывается для организации кадра стека?

Благодарю.

1 ответ

Решение

Любая идея, почему stackalloc Ключевое слово принимает переменную длину?

Потому что это полезно и желательно, чтобы это можно было сделать, и поэтому разработчики языка решили это разрешить.

Если эта инструкция возвращает указатель на буфер, выделенный в кадре стека, как компилятор управляет этим? Он перекомпилирует функцию во время выполнения каждый раз, когда она вызывается для организации кадра стека?

localalloc Инструкция распределяет память после текущего кадра стека, а присваивание просто сохраняет адрес обратно в ваш локальный. Следовательно: нет необходимости пересчитывать что-либо, кроме обновления конца стекового фрейма, чтобы он не перезаписывался, если мы вызываем другой метод.

(примечание: как обычно, при обсуждении стека, это на самом деле деталь реализации; JIT теоретически может выделить его из любого места, где захочет, при условии соблюдения семантики)

Другие вопросы по тегам