Tag: 性能

If语句与函数指针

目标是更改事件循环中的行为,具体取决于是否打开或关闭复选框。 我能想到的最简单的方法就是每次运行循环时测试复选框状态。 // if-statement void action() { /* … */ } void someLoop() { if (checkboxTrue) { action(); } // … other stuff } 如果使用函数指针,代码是否会更高效,更清晰或更好? 像这样: // function pointer void action() { /* … */ } void empty() {} void (*actionPtr)(); void checkboxChanged(int val) { if (val == 1) actionPtr = &realAction; else actionPtr = […]

C代码运行得更快吗?

从Objective-C调用C代码是否有任何性能提升? 我读过某个地方,与使用函数调用的其他语言相比,消息传递速度较慢。 因此,如果我从Objective-C代码调用C函数,我是否避免了消息传递开销? 在优化性能时,是否建议使用C语言编写最关键的函数和过程而不是使用Objective-C对象? 编辑: 鉴于有关过早优化和代码可读性的警告的数量,我想澄清我没有考虑常规应用程序,但非常具体的应用程序,如: 图像 加密或压缩算法。 数学 通常,函数或过程不需要OO设计,并且打算使用参数多次调用。

为什么这个NodeJS比本机C快2倍?

为了在工作中进行演示,我想比较NodeJS和C的性能。这是我写的: Node.js(for.js): var d = 0.0, start = new Date().getTime(); for (var i = 0; i > 1; } var end = new Date().getTime(); console.log(d); console.log(end – start); C(for.c) #include #include int main () { clock_t start = clock(); long d = 0.0; for (long i = 0; i > 1; } clock_t end = […]

VM /解释器的性能改进策略?

我用C语言编写了一个简单的VM,使用简单的指令切换,无需任何指令解码,但性能非常糟糕。 对于简单的aritmetic操作,对于相同的操作,VM比本机C代码慢大约4000倍。 我测试了一组长度为1000万的数组,第一组由程序指令组成,随机+ – * /操作,2个数组保存随机整数,第三个数组是操作目标存储。 我期待看到算术性能下降3-4倍,所以`4000x真的让我感到震惊。 即使是最慢的解释语言似乎也能提供更高的性能。 所以,我的方法出错了,如何在不使用JIT编译到机器代码的情况下提高性能? 实施是……基本上我能想到的最简单: begin: { switch (*(op+(c++))) { case 0: add(in1+c, in2+c, out+c); goto begin; case 1: sub(in1+c, in2+c, out+c); goto begin; case 2: mul(in1+c, in2+c, out+c); goto begin; case 3: div(in1+c, in2+c, out+c); goto begin; case 4: cout << "end of program" << endl; goto end; default: […]

局部变量初始化是否必须?

对于那些做过一些c / c ++维护或增强的人来说,未经初始化的本地人所造成的维护问题(特别是指针)将是显而易见的,但我仍然会看到它们并偶尔听到性能影响作为其理由。 在c中很容易certificate冗余初始化已经过优化: $ less test.c #include main() { #ifdef INIT_LOC int a = 33; int b; memset(&b,66,sizeof(b)); #else int a; int b; #endif a = 0; b = 0; printf (“a = %i, b = %i\n”, a, b); } $ gcc –version gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) […]

如何编写更高效的代码

世纪的问题? 我基本上想知道如果我将这段代码写成几个不同的变量或者我使用的是小数组,哪个会更有效。 int x = 34; int y = 28; int z = 293; VS double coordinate[3] = {34, 28, 293}; 我有一个坐标结构,我将按以下方式使用: typedef struct coordinates_t { double x = 0.0; double y = 0.0; double z = 0.0; } coordinates; typedef struct car_t { coordinates start; // car starting point coordinates location; // car current […]

检查两个数字是否相互排列?

给定两个数字a,b使得1 <= a,b <= 10000000000(10 ^ 10)。 我的问题是检查它们中的数字是否是彼此的排列。 这样做的最快方法是什么? 我想到使用散列但无法找到任何合适的散列函数。 有什么建议? 例如 – 123是312的有效排列 另外,我不想对数字中的数字进行排序。

如何测量cpu时间和挂钟时间?

我看到很多关于此的主题,即使在stackoverflow上,例如: 如何在Linux / Windows上测量CPU时间和挂钟时间? 我想测量cpu和wall时间。 虽然在我发布的主题中回答了问题的人建议使用gettimeofday来测量墙上时间,但我认为最好使用clock_gettime 。 所以,我写了下面的代码(它没关系,是否真的测量了一个时间,而不是cpu时间?我问,因为我找到了一个网页: http : //nadeausoftware.com/articles/2012/03/c_c_tip_how_measure_cpu_time_benchmarking#clockgettme其中说clock_gettime测量cpu时间…)是什么,我应该用哪个来测量墙上时间? 另一个问题是关于cpu时间。 我找到了clock非常好的答案,所以我也为它写了一个示例代码。 但它不是我真正想要的,因为我的代码它显示了0秒的CPU时间。 是否可以更准确地测量cpu时间(以秒为单位)? 感谢您的帮助(目前,我只对Linux解决方案感兴趣)。 inheritance我的代码: #include #include /* printf */ #include /* sqrt */ #include int main() { int i; double sum; // measure elapsed wall time struct timespec now, tmstart; clock_gettime(CLOCK_REALTIME, &tmstart); for(i=0; i<1024; i++){ sum += log((double)i); } clock_gettime(CLOCK_REALTIME, &now); double […]

涉及sin()的两个非常相似的函数表现出截然不同的性能 – 为什么?

考虑以下两个以两种不同方式执行相同计算的程序: // v1.c #include #include int main(void) { int i, j; int nbr_values = 8192; int n_iter = 100000; float x; for (j = 0; j < nbr_values; j++) { x = 1; for (i = 0; i < n_iter; i++) x = sin(x); } printf("%f\n", x); return 0; } 和 // v2.c #include #include […]

C是否有标准的mysql连接池库?

我有一个使用MySQL库进行数据库访问的C应用程序。 是否有一种标准的方法来为这样的应用程序实现数据库连接池? C连接器似乎不支持它。