我有以下结构的代码:
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 并搜索了
变更前:
...
00004e08 <test>:
变化后:
...
00004e08 <foo2>:
00005588 <test>:
所以我猜函数 foo2 停止了内联。
- 我说的对吗?
- 任何解释为什么会这样?
- 更改后 foo3() 发生了什么?它是在 foo2() 内还是在 test() 内变成内联的?
不确定是否需要:我将 gcc 用于 arc 处理器。
最佳答案
在学习了更多关于这个主题的知识并看了 Chandler Caruth 的一些讲座之后,我想说编译器几乎不确定地决定将代码内联到哪里。尤其是当不给它任何“内联”提示时,就像我的情况一样。
关于c++ - 函数不再内联。有什么解释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36307443/