问题标签 [compiler-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
397 浏览

c# - 匿名类型的编译器优化

好的好的,我知道这是一个 hack,但这是针对一个小型的数据操作项目,我想尝试一下。;-)

我一直认为编译器会检查 C# 程序中使用的所有匿名类型,如果属性相同,它只会在幕后创建一个类。

因此,假设我想从我拥有的一些类型化数据集中创建一个匿名类型:

我现在可以做一些有趣的事情,比如smallData2.Except(smallData1); 等等,这一切都有效。

现在,如果我有一对更大的匿名类型怎么办:

现在当我做bigData2.Except(bigData1); 编译器抱怨:

为什么?属性太多,编译器认为不值得优化?

谢谢!

0 投票
1 回答
283 浏览

c++ - 将双精度类型传递给 ceil 会导致 GCC 中不同优化级别的不同值

下面,result1 和 result2 变量值报告不同的值,具体取决于您是在 GCC 4.2.1 和 GCC 3.2.0 上使用 -g 还是使用 -O 编译代码(我还没有尝试过更新的 GCC 版本) :

result1 和 result2 == 5 仅在使用 -g 编译时,但如果我使用 -OI 编译,则得到 result1 == 6 和 result2 == 5。

这似乎是编译器如何进行优化的差异,或者与内部的 IEEE 浮点表示有关,但我很好奇这种差异究竟是如何发生的。如果可能的话,我希望避免查看汇编程序。

上面是用 C++ 编译的,但我认为如果使用 printfs 将其转换为 ANSI-C 代码,情况也是如此。

上述差异发生在 32 位 Linux 上,但不在 64 位 Linux 上。

谢谢博主

0 投票
4 回答
3224 浏览

java - 重复方法调用的Java编译器优化?

java 编译器(JDK1.6.0_21 中的默认 javac)是否优化代码以防止使用相同的参数一遍又一遍地调用相同的方法?如果我写了这段代码:

该方法foo(bar)是否只运行一次?如果是这样,有什么办法可以防止这种优化?(我正在尝试比较两种算法的运行时间,一种是迭代的,一种是比较的,我想多次调用它们以获得具有代表性的样本)

任何见解将不胜感激;我把这个问题带到了精神错乱的地步(虽然我的电脑有一段时间非常快,所以我继续添加方法调用,直到我code too large在 43671 行得到错误)。

0 投票
3 回答
401 浏览

c++ - 具有相同 if 语句的 C++ 内联方法

我正在为 OpenGL 纹理编写处理程序,并且正在考虑安全性和性能。哪个级别的优化应该删除标记的 if 语句?

0 投票
4 回答
523 浏览

c - a = -2147483648 - a; 编译器优化

我正在尝试学习如何对软件进行逆向工程以及在编译器优化之前了解代码外观的所有技巧。

我多次发现这样的事情:

我最初认为这是一个abs():a 下溢,所以你得到了正值。但由于a是负数(见 if),这相当于:

这将是一个非常小的负数,而不是绝对值a。我错过了什么?

0 投票
2 回答
844 浏览

performance - 哪些编译器可以内联间接函数调用?

LLVM 的 LDC D 编译器可以在某些情况下内联间接函数调用,如果它可以证明目标是静态已知的。这是可能发生这种情况的玩具示例(在 D 中):

在这种情况下,即使myDelegate()调用名义上是间接调用,目标对于人类读者和 LLVM/LDC 的流分析来说都是显而易见的,因此它被内联。

在现代编译器中,将间接函数调用内联到静态可知目标的能力有多广泛?LLVM 是唯一可以做到这一点的提前编译器吗?JIT 编译器更常见吗?

0 投票
2 回答
896 浏览

perl - O=Deparse 是如何工作的,Perl 有和折叠常量数组吗?

我想知道,是否-MO=Deparse向您展示了所有 Perl 优化,为什么不将其折叠到 Perl 5.10 中?

IRC 上的一些人认为这O=Deparse可能没有显示全部,但它肯定显示了一些不断的折叠。

如果我显式编写常量 sub,结果相同。constant.pm虽然可以预测,但其中的文档让您创建一个常量列表而不是一个常量数组也很有趣。我假设这不仅不像标量常量那样折叠,而且它需要在每次调用时创建一个新数组的开销。

我能得出的唯一结论-MO=Deparse是显示所有折叠,而常量数组只是没有在 Perl 中优化?是这样吗?有技术原因吗?

0 投票
2 回答
120 浏览

x86-64 - 今天生成 X86 程序集的编译器的状态如何?

每当我与从事实时性能工作的人交谈时,他们往往会指出生成的 X86 汇编指令效率不高。

随着 VMX 之类的出现,我不得不问,商业 C++ 编译器使用这些指令集的可能性有多大?我感觉编译器供应商不会发布特别花哨的程序集,也不会专注于让编译器保持最新。

就此而言,首先什么是好的 X86 组件?

0 投票
2 回答
908 浏览

c++ - VS2008 C++ Release 模式比 Debug 模式慢

我正在使用本机中的 STL,混合本机和托管 Visual C++。我有一个奇怪的问题。似乎当我在设置了所有优化的发布模式下编译我的软件时,我的软件运行速度始终比在调试模式下慢。这里有什么问题?

这些是我的调试命令行选项:

/Od /D "WIN32" /D "_D​​EBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MDd /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /子 /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System .Data.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows .Forms.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"

这些是我的 Release 命令行选项:

/Oi /Ot /Oy /GT /GL /D "WIN32" /D "_SECURE_SCL=0" /D "_HAS_ITERATOR_DEBUGGING=0" /D "VC_EXTRALEAN" /D "_UNICODE" /D "UNICODE" /FD /EHa /MD /Fo"Release\" /Fd"Release\vc90.pdb" /W3 /nologo /c /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll " /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll" / FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"

0 投票
2 回答
1093 浏览

c# - CLR 编译器优化示例

几个月后我正在做一个关于 .Net 性能和优化的演讲,我想提供一些不必要的优化示例,无论如何编译器都会做这些事情。

我在哪里可以找到一些关于编译器实际上能够在代码之前和之后进行哪些优化的解释?