为什么.NET 4.0中C#方法的即时编译顺序会影响它们执行的速度? 例如,考虑两个等价的方法: public static void SingleLineTest() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int count = 0; for (uint i = 0; i < 1000000000; ++i) { count += i % 16 == 0 ? 1 : 0; } stopwatch.Stop(); Console.WriteLine("Single-line test –> Count: {0}, Time: {1}", count, stopwatch.ElapsedMilliseconds); } public static void MultiLineTest() […]
C#编译器是用C ++编写的吗?
为什么要评论这个for循环的前两行,并取消第二个42%加速的结果呢? int count = 0; for (uint i = 0; i < 1000000000; ++i) { var isMultipleOf16 = i % 16 == 0; count += isMultipleOf16 ? 1 : 0; //count += i % 16 == 0 ? 1 : 0; } 时序的背后是非常不同的汇编代码:循环中的13个指令和7个指令。 该平台是运行.NET 4.0 x64的Windows 7。 代码优化已启用,testing应用程序在VS2010之外运行。 [ 更新: Repro项目 ,用于validation项目设置。] 消除中间布尔值是一个基本的优化,是我1980年代龙书中最简单的一种。 在生成CIL或JITing x64机器码时,优化是如何不被应用的? […]
我已经把它搞糊涂了,似乎没有安装Xcode(这需要1.5GB的空间)没有办法在OS X上安装gcc。 我需要的只是gcc,而没有其他的Xcode附带的垃圾。 在这一点上,我将采取任何其他types的C编译器。 我知道我可以简单地安装Xcode,但这是因为我没有我的原始安装光盘,也没有快速的互联网连接。 所以…有没有人有任何build议? 编辑:对不起,如果我不清楚,但我也需要标题。 我目前正在通过fink安装gcc4,并且正在下载共享库。 我会更新进展。 编辑2:好的,所以我成功安装了gcc使用fink。 但是,它几乎没用:“错误:C编译器不能创build可执行文件”。 search后,我发现没有安装苹果的开发工具是错误的原因。 可能是因为我需要所有只能通过Xcode使用的库,头文件等。
在整个networking中,我感觉到为编译器编写C后端不再是一个好主意。 GHC的C后端没有被积极开发(这是我没有支持的感觉)。 编译器的目标是C–或LLVM。 通常情况下,我认为GCC是一个很好的老成熟的编译器,在优化代码方面performance良好,因此编译为C将使用GCC的成熟度来产生更好更快的代码。 这是不是真的? 我意识到这个问题在很大程度上取决于正在编译的语言的性质和其他因素,以便获得更多可维护的代码。 我正在寻找一个比较一般的答案(关于编译语言),它只关注性能(不考虑代码质量,等等)。 如果答案中包含一个关于GHC为什么偏离C的解释,以及为什么LLVM能够更好地作为后端( 参见这个 )或者其他编译器的例子,我也不太了解。
下面的代码通过指数式慢algorithm计算斐波纳契数: #include <cstdlib> #include <iostream> #define DEBUG(var) { std::cout << #var << ": " << (var) << std::endl; } constexpr auto fib(const size_t n) -> long long { return n < 2 ? 1: fib(n – 1) + fib(n – 2); } int main(int argc, char *argv[]) { const long long fib91 = fib(91); DEBUG( […]
假设我有一个return的if语句。 从效率的angular度来看,我应该使用 if(A > B): return A+1 return A-1 要么 if(A > B): return A+1 else: return A-1 当使用编译语言(C)或脚本语言(Python)时,我应该更喜欢哪一种?
我知道,在大多数GNU / Linux系统上,GCC可以通过命令行(而不是“gcc”)命名为“cc”。 海湾合作委员会的行为是否与其他方式有所不同? 例如,我知道通过名称“g ++”而不是“gcc”来调用GCC会导致GCC的行为不同(在C ++标准库中将.c文件视为C ++源代码和链接)。 “gcc”和“cc”之间的行为有没有类似的区别? 编辑:到目前为止收到的答案都没有给出明确的 “是”或“否”,以确定GCC是否会以一种方式相对于另一种方式行为不同。 然而,潜入源头检查其行为的想法使我走上了这条道路。 根据我在那里find的,我现在相信答案是: GCC的行为是一样的,不pipe它是通过“gcc”还是“cc”来调用 。
经历了一些使用reflection器的框架类,并注意到一些方法和属性具有以下属性 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] 我很确定我也在别的地方看过上面的评论,从来没有跟上过。 有人可以告诉我这是什么意思,在C#和任何其他上下文?
所以我是一个新的程序员,我只是在我的Macbook上安装了XCode来获取GCC。 我认为Xcode是在OSX上获得GCC的唯一方法。 现在,当我运行我的Hello World应用程序时,在C ++中,g ++出现了,它是版本4.0.1,但是当我查找以g开头的命令时,我还会看到g ++ – 4.2。 有什么办法使4.2默认,而不是4.0.1,也有办法更新到最新版本4.4.0的gcc? 编辑:好吧,所以我安装了macports并安装了gcc4.4,它显示在terminal上作为gcc-mp-4.4,我怎么让它默认与gcc_select,就像什么是命令和东西。 谢谢。