Я пишу на C++, используя MSVC++ 2012, и мой код предназначен для платформы x86. У меня есть ситуация, когда было бы полезно написать функцию, которая (среди прочего) может выделить некоторую память в стеке функции CALLING. Не мое намерение в этом посте обсуждать мудрость этого, но только для рассмотрения технической осуществимости.Выделение памяти в стеке вызывающего абонента
Мой план реализации заключается в том, чтобы написать мою функцию как голую функцию с пользовательским прологом в встроенной сборке. В прологе я сначала определяю, сколько памяти мне нужно, а затем переместите адрес возврата, параметры и этот указатель вниз по стеку на эту сумму. Наконец, я бы затем корректировал указатель стека на эту сумму. Если я не ошибаюсь, это создаст область в стеке вызывающей функции.
Кто-нибудь видит какие-либо отверстия в этом плане?
Не совсем, нет, предполагая, что вы не испортили ассемблер, и есть достаточно пространства для стека :) Я предполагаю, что стек должен будет исправить в какой-то момент после возврата, чтобы удалить пространство распределения? –
Как это делает '' alloca' '(http://man7.org/linux/man-pages/man3/alloca.3.html)? –
Это, вероятно, проблема XY. 'alloca' делает то, что вы хотите, поскольку @CaptainObvlious отметил, но без какого-либо фона все решения могут быть просто бессмысленными. –