Tag: 表现

为什么我的C代码运行缓慢?

我在C中编写了一些代码,我很惊讶地发现执行时间比我预期的要长。 我想知道哪些操作成本高昂以及如何摆脱它们。 我使用赋值语句,条件(嵌套),循环,函数调用和回调。 对常见的C性能缺陷有什么好的参考? 我可以使用一个好的剖析器吗? 谢谢你们 感谢您的所有投入。 你是绝对正确的:它的算法可以减慢事情(大幅度)。 虽然通过编码实践可以获得一点性能提升 – 我100%确信只有错误的算法才能大大减慢速度 。 事实上:我正在研究RB树并按升序插入节点。 花了很多时间(和Binary Search Tree(Skewed)一样糟糕)。 在寻求你的建议后,我检查了算法,我在平衡方面犯了一个错误,使树倾斜(倾斜)。 我纠正了 再次感谢您的建议。

fwrite() – 大小和计数对性能的影响

关于fwrite()中两个参数’size’和’count’的目的似乎有很多混淆。 我想弄清哪个会更快 – fwrite(source, 1, 50000, destination); 要么 fwrite(source, 50000, 1, destination); 这是我的代码中的一个重要决定,因为此命令将执行数百万次。 现在,我可以跳转到测试并使用提供更好结果的那个,但问题是该代码适用于多个平台。 所以, 如何才能获得跨平台更好的答案? fwrite()的实现逻辑会因平台而异吗? 我意识到有类似的问题( fread / fwrite将大小和计数作为参数的原理是什么? fwrite和写入大小的性能 )但是要明白这是关于同一问题的另一个问题。 在这种情况下,类似问题的答案是不够的。

C中fgetc / fputc和fread / fwrite之间的速度比较

所以(只是为了好玩),我只是想编写一个C代码来复制文件。 我四处看看似乎所有从流中读取的函数调用fgetc() (我希望这是真的吗?),所以我使用了这个函数: #include #include #include #define FILEr “img1.png” #define FILEw “img2.png” main() { clock_t start,diff; int msec; FILE *fr,*fw; fr=fopen(FILEr,”r”); fw=fopen(FILEw,”w”); start=clock(); while((!feof(fr))) fputc(fgetc(fr),fw); diff=clock()-start; msec=diff*1000/CLOCKS_PER_SEC; printf(“Time taken %d seconds %d milliseconds\n”, msec/1000, msec%1000); fclose(fr); fclose(fw); } 在2.10Ghz core2Duo T6500 Dell inspiron笔记本电脑上, 这个文件的运行时间为140毫秒。 但是,当我尝试使用fread / fwrite ,我会减少运行时间,因为我不断增加为每个调用传输的字节数(即,以下代码中的变量st ),直到它在10ms左右达到峰值! 这是代码: #include #include #include #define FILEr […]

如何提高这个Haskell程序的性能?

我正在解决Project Euler中的问题,作为一种学习Haskell的方法,我发现我的程序比同类C版本慢得多,即使在编译时也是如此。 我该怎么做才能加速我的Haskell程序? 例如,我对问题14的powershell解决方案是: import Data.Int import Data.Ord import Data.List searchTo = 1000000 nextNumber :: Int64 -> Int64 nextNumber n | even n = n `div` 2 | otherwise = 3 * n + 1 sequenceLength :: Int64 -> Int sequenceLength 1 = 1 sequenceLength n = 1 + (sequenceLength next) where next = nextNumber […]

以更快的方式检查目录是否存在

我正在使用opendir函数来检查目录是否存在。 问题是我在一个巨大的循环中使用它,它正在膨胀我的应用程序使用的ram。 检查C中是否存在目录的最佳(最快)方法是什么? 如果不存在,创建它的最佳(最快)方法是什么?

严格别名的性能优势

在C中,观察严格混叠会带来什么样的性能优势?