【发布时间】:2018-03-17 09:30:38
【问题描述】:
在https://www.geeksforgeeks.org/inline-functions-cpp/这篇文章中,它指出内联的缺点是:
3) 过多的内联也会降低指令缓存命中率,从而降低从缓存内存到主内存的指令获取速度。
内联如何影响指令缓存命中率?
6) 内联函数可能会导致抖动,因为内联可能会增加二进制可执行文件的大小。内存抖动会导致计算机性能下降。
内联如何增加二进制可执行文件的大小?仅仅是它增加了代码库长度吗?此外,我不清楚为什么拥有更大的二进制可执行文件会导致抖动,因为两者似乎没有联系。
【问题讨论】:
-
为什么投反对票??????这是一个完全合理的问题
-
不是我的反对意见。但是 SO 解决了相当具体的问题,一般不提供“我不明白,向我解释”之类的答案。你从好心的人那里得到了一些人的反对意见,但有人可能认为你可以在发布问题之前自己花更多的精力研究这个话题。
-
由于大量代码大小而导致交换空间/虚拟内存的抖动在现代台式机/笔记本电脑上是不合理的,除非内联数量非常不合理,产生数百或数千兆字节的可执行文件,或者如果整个系统是用一个疯狂的编译器编译的,所以所有的程序都很大,你有几个同时运行,而你“只有”几个 GiB 的物理 RAM。
-
@Jurassic - 否决票可能是因为 geeksforgeeks 已知包含很多废话,并且不是学习的好地方。在这种情况下,一些信息看起来像是 25 年前 Turbo-C++ 文档中的引用。 正确使用内联可以使代码更小更快。
-
@Jurassic - 我不是 DV(我是 UVed),但总的来说,你有一大群人讨厌基于“标准没有说”或“你不知道”的实施或性能相关问题“不需要知道”或“只需编写简单的代码,编译器就会对其进行排序”或“它是特定于实现的”或“编译器比你更聪明”或“它是否需要快”之类的。很多这样的人都在 C/C++ 标签上闲逛,如果你在那里问那种类型的问题,你就会得到即时的 DV。一个提示就是不要使用这些标签,而是包含其他标签。
标签: caching memory inline executable cpu-architecture