Jos*_*vin 7 c c++ stack memory-management allocation
如果您编写的应用程序是:
现代整个程序优化编译器可以优化所有堆栈分配(例如GCC,MSVC,ICC)吗?在这种情况下,它似乎应该能够静态地分配所有可能的堆栈空间."整个程序"我的意思是编译器可以访问/ all /源代码(在运行时没有可能的dlopen'ing事物等).
这是一条太长的评论:
请注意,虽然理论上所有堆栈分配都可以被优化掉,但可能会分配比必要的更多的堆栈分配。这不是OP所要求的,但考虑一下可能很有趣。找到所需的最小分配量相当于解决停机问题。想象一个程序的结构如下:
<do 'something'>
<call last thing which happens to require more
stack space than everything else in 'something'>
Run Code Online (Sandbox Code Playgroud)
仅当“停止”时才需要额外的堆栈空间<do 'something'>。
您还可以想象优化变得任意困难的其他变体。例如,您的程序可以简单地使用用户输入计算 3SAT 表达式,并根据该输入执行某些操作 - 但该 3SAT 表达式可能有也可能没有任何导致 true 的值。
也许存在更微不足道的情况:用户可能永远不会输入需要更多堆栈空间进行处理的输入。