Mat*_*att 7 c recursion stack gcc callstack
假设我有一些操纵图结构的递归函数:
typedef struct Node {
Data data;
size_t visited;
size_t num_neighbors;
struct Node *neighbors[];
} Node;
void doSomethingWithNode(Node *node)
{
if ((!node) || node->visited)
return;
node->visited = 1;
/* Do something with node->data */
size_t /* some local variables */;
size_t i;
for (i = 0; i < node->num_neighbors; i++)
{
/* Do some calculations with the local variables */
if (/* something */)
doSomethingWithNode(node->neighbors[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
由于我在循环中使用的局部变量,compile(gcc)为这个函数创建了一个大于I-like的堆栈帧(即使有很多pushq和popq指令-O3),这是一个问题,因为它是深刻的递归.由于我访问节点的顺序无关紧要,我可以重构此代码以使用一堆Node指针,从而减少每次迭代一个指针的开销.
gcc)解决这个问题?| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |