函数停止内联.任何解释
A function stops being inline. Any explanation?
我有一个如下结构的代码:
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()
不确定是否需要:我正在为arc处理器使用gcc。
在学习了更多关于这个主题的知识,并观看了Chandler Caruth的一些讲座后,我想说编译器几乎不确定地决定在哪里内联代码。尤其是当没有给它任何"内联"提示时,就像我的情况一样。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- C++映射有2个键,这样任何1个键都可以用来获取值
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 找不到 QRegularExpression 行为的任何解释。它有效,但不应该
- 任何机构都可以在运算符重载中解释这行代码
- ob->我应该返回 ob "this" 的地址,但它返回 i ,任何解释?
- 是否有任何方法可以在初始化之前更改变量的类型,您可以用示例解释
- 从未解释的术语代表到Z3中的术语的任何方法
- 缓存错过压力测试:令人惊叹的结果.任何解释
- 函数停止内联.任何解释
- 由于抽象模板arg的实例化,Boost::lambda表达式编译失败.任何解释和/或解决方法