函数停止内联.任何解释?

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停止了内联.

  1. 我对么?
  2. 有没有解释为什么会这样?
  3. 改变之后foo3()发生了什么?它是否在foo2()内部或在test()内部内联?

不确定是否需要:我正在使用gcc作为弧形处理器.

Ela*_*iss 1

在了解了有关该主题的更多信息并观看了 Chandler Caruth 的一些讲座之后,我想说编译器几乎不确定地决定在何处内联代码。特别是当不给它任何“内联”提示时,就像我的例子一样。