Функция alloca()
практически никогда не нужна;в целях выделения памяти вы можете использовать malloc()
/ free()
в C (или одну из совокупности возможностей в C ++) и достичь почти такого же практического эффекта.Это имеет преимущество в том, что лучше справляется с меньшими размерами стека.
Однако Я видел [1] одно законное (если хак!) Его использование: для обнаруженияпотенциальное переполнение стека в Windows;если выделение (того количества отстойного пространства, к которому вы хотели получить доступ) не удалось, вы вышли, но у вас было достаточно места для изящного восстановления.Он был обёрнут в __try
/ __except
, чтобы не вылетать, и требовал дополнительных трюков на ассемблере, чтобы избежать проблем, связанных с gcc.Как я уже сказал, взломать.Но умное, единственное допустимое использование для alloca()
, которое я когда-либо видел.
Но не делайте этого.Лучше написать код, чтобы не нуждаться в таких играх.
[1] Это было в Tcl 8.4 (и, возможно, в более ранних версиях Tcl).Это было удалено в более поздних версиях.Более поздние версии удалили это, потому что это было привередливым, очень хитрым и глубоко тревожащим.8.6 использует реализацию стека механизма исполнения вместо такого рода фанки.