ccache 预处理器和直接模式有啥区别?

Posted

技术标签:

【中文标题】ccache 预处理器和直接模式有啥区别?【英文标题】:What is a difference between ccache preprocessor and direct modes?ccache 预处理器和直接模式有什么区别? 【发布时间】:2014-02-11 08:58:52 【问题描述】:

AFAIK,预处理器模式很简单:你给 ccache 一个预处理的源,它对源和命令行参数进行哈希处理,然后存储所有相应的信息,如标准错误、目标文件等。

但是什么是直接模式,为什么它要快得多?它背后的概念是什么?

【问题讨论】:

【参考方案1】:

“直接模式”中的“直接”是指“不使用预处理器直接读取头文件”。这样做是因为与仅读取包含文件内容相比,大多数预处理器相对较慢。这是因为预处理器必须做一些事情,比如扩展宏来产生正确的预处理输出。对于 ccache 的目的,识别头文件的内容就足够了,而不是在计算哈希时对内容进行正确的预处理。

另请参阅 ccache 手册中的How ccache works 部分。

【讨论】:

那么我什么时候应该使用预处理器模式?在我看来没有必要, cus 直接模式可以检测头文件是否更改,如果更改,哈希更改,它会退回到ccache.dev/manual/3.7.11.html#_the_direct_mode中所述的预处理器模式 @shelper:ccache 回退到预处理器模式是正确的,所以如果你的意思是这样,通常不需要通过配置禁用直接模式。即使启用了直接模式,您有时也会隐式使用预处理器模式,例如,当源文件或头文件发生更改时,预处理的源代码保持完全相同(例如,在编辑评论时)。【参考方案2】:

http://ccache.samba.org/performance.html

对于缓存未命中,直接模式比预处理器模式具有更高的开销,但对于缓存命中要快得多 希望对您有所帮助。

【讨论】:

页面显示它们在缓存未命中方面几乎相差 1%,

以上是关于ccache 预处理器和直接模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Python 装饰器和装饰器模式有啥区别?

装饰器、包装器和适配器模式之间有啥区别?

装饰器和指令在角度上有啥区别?

装饰器和指令在角度上有啥区别?

动态朴素贝叶斯分类器和朴素贝叶斯分类器有啥区别

sitecore 中的访问查看器和安全编辑器有啥区别?