fbpx
维基百科

内联展开

内联展开(或称内联,下文或交替使用)是一种将函数体直接展开到调用处的一种优化技术。它可以由手工指定(如inline关键字),或者经由编译优化自动完成。内联展开类似于宏展开,区别在于内联展开在编译时完成,而宏展开则可能在预编译(如C/C++)、编译时(如Scheme)、运行时(如Scheme)时完成。

内联是一种重要的优化技术。内联的好处主要在于消除函数的调用开销(压栈,保护/恢复现场),但内联展开对于性能的提升不能一概而论,它可能导致生成的代码体积膨胀,并且影响指令缓存的命中率。有研究表明函数内联展开在缓存小的时候能提升性能,缓存较大的时候性能有可能下降[1]

除此之外,内联展开会引入大量冗余代码,需要通过一系列编译优化步骤进行缩减。比如一个记录(或理解为结构体)中的值是不变的,那么可以将其值直接替换到引用处;逻辑上不被使用到的分支代码或者变量,会被自动消除掉;逻辑上不可能进入的分支也可以消除掉。通过这些优化可以极大缩减冗余的代码,使得程序编译后获得较为紧凑的体量。[2][3]

參考資料

  1. ^ The Effect of Code Expanding Optimizations on Instruction Cache Design. Chen, Chang, et al. In abstract: “Function inline expansion improves the performance for small cache sizes, but degrades the performance of medium caches.“
  2. ^ Shrinking Lambda Expressions in Linear Time. Appel & Jim
  3. ^ Shrink Fast Correctly! Oliver & Appel

内联展开, 或称内联, 下文或交替使用, 是一种将函数体直接展开到调用处的一种优化技术, 它可以由手工指定, 如inline关键字, 或者经由编译优化自动完成, 类似于宏展开, 区别在于在编译时完成, 而宏展开则可能在预编译, 如c, 编译时, 如scheme, 运行时, 如scheme, 时完成, 内联是一种重要的优化技术, 内联的好处主要在于消除函数的调用开销, 压栈, 保护, 恢复现场, 但对于性能的提升不能一概而论, 它可能导致生成的代码体积膨胀, 并且影响指令缓存的命中率, 有研究表明函数在缓存小的时候能. 内联展开 或称内联 下文或交替使用 是一种将函数体直接展开到调用处的一种优化技术 它可以由手工指定 如inline关键字 或者经由编译优化自动完成 内联展开类似于宏展开 区别在于内联展开在编译时完成 而宏展开则可能在预编译 如C C 编译时 如Scheme 运行时 如Scheme 时完成 内联是一种重要的优化技术 内联的好处主要在于消除函数的调用开销 压栈 保护 恢复现场 但内联展开对于性能的提升不能一概而论 它可能导致生成的代码体积膨胀 并且影响指令缓存的命中率 有研究表明函数内联展开在缓存小的时候能提升性能 缓存较大的时候性能有可能下降 1 除此之外 内联展开会引入大量冗余代码 需要通过一系列编译优化步骤进行缩减 比如一个记录 或理解为结构体 中的值是不变的 那么可以将其值直接替换到引用处 逻辑上不被使用到的分支代码或者变量 会被自动消除掉 逻辑上不可能进入的分支也可以消除掉 通过这些优化可以极大缩减冗余的代码 使得程序编译后获得较为紧凑的体量 2 3 參考資料 编辑 The Effect of Code Expanding Optimizations on Instruction Cache Design Chen Chang et al In abstract Function inline expansion improves the performance for small cache sizes but degrades the performance of medium caches Shrinking Lambda Expressions in Linear Time Appel amp Jim Shrink Fast Correctly Oliver amp Appel 取自 https zh wikipedia org w index php title 内联展开 amp oldid 66868792, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。