Как уже говорили другие, оно будет освобождено, и я не очень понимаю, как вы могли бы изменить поведение.Если вы посмотрите, как alloca
компилируется на amd-64:
pushq %rbp
movq %rsp, %rbp
subq $144, %rsp
movq %rsp, %rax
addq $15, %rax
shrq $4, %rax
salq $4, %rax
leave
ret
Вы видите
1) Alloca на самом деле не является вызовом функции (потому что, как вы сказали, онапришлось бы обрабатывать стек по-разному!)
2) Что бы ни делал alloca с указателем стека, он просто будет забит в конце функции, когда rbp
перезаписывает rsp
Так может вы получите поведение, о котором вы спрашиваете (без написания ассемблера)?Это сложный вопрос, и я не знаю, но похоже, что, вероятно, нет.