【发布时间】:2013-05-01 02:38:04
【问题描述】:
我的 c++ 代码在 Debian (gcc (Debian 4.7.2-5) 4.7.2) 中正常工作,但在 Ubuntu (gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2) 中失败。我正在变量之间重用堆栈空间,类似于这些问题中描述的内容:
In C, do braces act as a stack frame?
除了我没有嵌套范围。相反,代码看起来类似于:
TreeWalker walker;
walker.addVisitor(nodeType1, Visitor1());
walker.addVisitor(nodeType2, Visitor2());
...
walker.walkTree(tree);
我可以通过在堆上分配来缓解这个问题,但我想知道我可以做些什么来确保局部变量留在原地?将访问者分配给局部变量是否足以确保它们不会被重用?标准是否在函数代码中最后一次使用堆栈变量后对它们提供任何承诺?
【问题讨论】:
-
“我的 c++ 代码可以正常工作” 如果您的程序依赖于未在同一位置创建的临时文件,则它无法正常工作,它只有 似乎有时可以正常工作。您有一个应该修复而不是解决的错误。
标签: c++ variables optimization stack temporary