![]() |
1
8
使用JIT编译器和运行时类加载的语言有其他权衡,因为虚拟方法不是静态已知的,但是JIT可以收集运行时分析信息,例如方法调用频率:
A search on Google Scholar 显示许多论文,例如
A search on Google Books 揭示了相当多的书籍与论文或章节的功能在不同的上下文中嵌入。
|
![]() |
2
0
函数调用意味着一些额外的代码(函数序言,在这里设置了新的堆栈帧,函数尾声,在那里清除了它)。如果编译器发现函数代码比序言和尾声小,那么它可以决定不值得进行实际调用,并将内联函数。 我看到调用函数而不是内嵌函数的唯一好处是与大小相关。我想,在一个函数中嵌入一个函数,然后展开一个循环,可能会导致显著的大小增加。 |
![]() |
3
0
据我所见,函数大小是用于确定内联的唯一因子编译器。但是,如果您执行配置文件引导优化(PGO),我相信编译器能够使用其他变量,例如调用数/调用设置时间。 |
![]() |
4
0
在.NET中,主要是基于大小。以编译字节为单位测量父函数和子函数的大小。然后测量组合函数的大小。如果组合函数更小,那么内联是一个好主意。 这样做的原因是使尽可能多的代码插入CPU的缓存成为可能。缓存未命中比现代CPU中的函数调用昂贵得多。 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 6 月前 |
![]() |
MysteryMoose · GCC下故意忽略初始化器警告中的过量元素 8 月前 |
|
Ken P · 如何利用[*]printf格式类型规范警告? 12 月前 |
![]() |
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 1 年前 |
![]() |
adversarr · 全局变量何时导出到可执行文件? 1 年前 |