知识卡片
优化是折中
内容
编译器优化追求更少 CPU、内存或体积,但这些目标经常互相牵制,有些优化还接近 NP 难题。Go 因此选择保守、局部且可解释的策略;发散:性能调优也应先找主矛盾。
参考来源
- 位置:《Go语言底层原理剖析》第1章《深入Go语言编译器》1.2节《Go语言编译器的阶段》
- 结论依据:原文明确指出"编译器优化并不是一个非常明确的概念",降低内存和降低CPU这两个常见目标"可能是相互冲突的",并指出部分代码优化"存在着NP难题"导致优化难度随代码增加呈指数增长,因此推出"编译器无法进行最佳优化,通常采用折中方案"的结论。
- 原始内容:需要注意的是,编译器优化并不是一个非常明确的概念。优化的主要目的一般是降低程序资源的消耗,比较常见的是降低内存与CPU的使用率。但在很多时候,这些目标可能是相互冲突的,对一个目标的优化可能降低另一个目标的效率。同时,理论已经表明有一些代码优化存在着NP难题,这意味着随着代码的增加,优化的难度将越来越大,需要花费的时间呈指数增长。因为这些原因,编译器无法进行最佳的优化,所以通常采用一种折中的方案。