Ela*_*iss 5 c c++ stack gcc inline
我有以下结构的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在,我所做的是将以下指令添加到foo1():
void foo1(uint32_t *num_failures)
{
...
(*num_failures)++;
}
Run Code Online (Sandbox Code Playgroud)
突然间,我看到从foo2()内部打印的堆栈大小增加了36个字节.
我做了一个objdump并为<symbols>加油.产生以下内容:
改变之前:
...
00004e08 <test>:
Run Code Online (Sandbox Code Playgroud)
改变后:
...
00004e08 <foo2>:
00005588 <test>:
Run Code Online (Sandbox Code Playgroud)
所以我猜函数foo2停止了内联.
不确定是否需要:我正在使用gcc作为弧形处理器.
在了解了有关该主题的更多信息并观看了 Chandler Caruth 的一些讲座之后,我想说编译器几乎不确定地决定在何处内联代码。特别是当不给它任何“内联”提示时,就像我的例子一样。