Почему stackalloc принимает переменную длину?
Есть идеи, почему ключевое слово stackalloc принимает переменную длину?
Если эта инструкция возвращает указатель на буфер, выделенный в кадре стека, как компилятор управляет этим? Он перекомпилирует функцию во время выполнения каждый раз, когда она вызывается для организации кадра стека?
Благодарю.
1 ответ
Любая идея, почему
stackalloc
Ключевое слово принимает переменную длину?
Потому что это полезно и желательно, чтобы это можно было сделать, и поэтому разработчики языка решили это разрешить.
Если эта инструкция возвращает указатель на буфер, выделенный в кадре стека, как компилятор управляет этим? Он перекомпилирует функцию во время выполнения каждый раз, когда она вызывается для организации кадра стека?
localalloc
Инструкция распределяет память после текущего кадра стека, а присваивание просто сохраняет адрес обратно в ваш локальный. Следовательно: нет необходимости пересчитывать что-либо, кроме обновления конца стекового фрейма, чтобы он не перезаписывался, если мы вызываем другой метод.
(примечание: как обычно, при обсуждении стека, это на самом деле деталь реализации; JIT теоретически может выделить его из любого места, где захочет, при условии соблюдения семантики)