我有以下结构的代码:
void foo1(uint32_t *num_failures)
{
...
}
void foo2(uint32_t *num_failures)
{
...
}
void foo3(uint32_t *num_failures)
{
...
}
void test()
{
uint32_t num_failures = 0;
foo1(&num_failures);
foo2(&num_failures);
foo3(&num_failures);
}
现在,我所做的是将以下说明添加到 foo1():
void foo1(uint32_t *num_failures)
{
...
(*num_failures)++;
}
突然我发现从 foo2()内部打印的堆栈大小增加了36个字节。
我做了一个objdump并且为< symbols>加油。产生以下内容:
改变之前:
...
00004e08 <test>:
改变之后:
...
00004e08 <foo2>:
00005588 <test>:
所以我猜函数foo2停止了内联。
不确定是否需要:我正在使用gcc作为弧形处理器。
答案 0 :(得分:1)
在学习了更多关于这个主题,并看到Chandler Caruth的一些讲座后,我会说编译器几乎不确定地决定在哪里内联代码。特别是当没有给它任何'内联'提示时,就像我的情况一样。