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

时间:2016-03-30 11:27:28

标签: c++ c gcc stack 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);
}

现在,我所做的是将以下说明添加到 foo1()

void foo1(uint32_t *num_failures)
{
   ...
   (*num_failures)++;
}

突然我发现从 foo2()内部打印的堆栈大小增加了36个字节。

我做了一个objdump并且为< symbols>加油。产生以下内容:

改变之前:

...
00004e08 <test>:

改变之后:

...
00004e08 <foo2>:
00005588 <test>:

所以我猜函数foo2停止了内联。

  1. 我说错了吗?
  2. 为何会发生这种情况?
  3. 改变后foo3()发生了什么变化?它是否内嵌在 foo2()内或 test()内?
  4. 不确定是否需要:我正在使用gcc作为弧形处理器。

1 个答案:

答案 0 :(得分:1)

在学习了更多关于这个主题,并看到Chandler Caruth的一些讲座后,我会说编译器几乎不确定地决定在哪里内联代码。特别是当没有给它任何'内联'提示时,就像我的情况一样。