|
楼主 |
发表于 2011-6-4 00:03
|
显示全部楼层
原帖由 贝妮 于 2011-6-3 16:19 发表
楼主懂得的语言太多啦!这个编译好象不是在运行,而是直接把偏移的地址给出。C中交换两个字符串也能这样快么?
A="ABC"
B="DEF"
这个快不是机器指令的效率提高,而是编译器直接用更简单的等价代码替换了我的C++代码。
C++处理字符串比VB麻烦得多,如下代码交换5亿次要37秒,而VB做同样的事情只需要0.37秒!
于是我想也许是我用了错误的字符串类 #include <string>,这个类也许是很慢的。。。。。。
#include <string>
string str1("ABCD");
string str2("1234");
string swap;
i=0;
for (i=1; i < 500000001; i++)
{ swap = str1; str1 = str2; str2 = swap; }
于是换成以下代码,还是要10秒,比VB慢多了,于是我想strcpy这个函数估计也是很慢的。。。。。。
char str1[] = "1111";
char str2[] = "2222";
char swap[] = " ";
for (i=1; i <= 500000001; i++)
{
strcpy(swap, str1);
strcpy(str1, str2);
strcpy(str2, swap);
}
后来想起也许VB并没有交换字符串的值,而是交换字符串的地址而已,再改C++代码为以下,结果耗时0.211秒,比VB快50%左右
char str1[] = "1111";
char str2[] = "2222";
char swap[4];
for (i=1; i <= 500000001; i++)
{
*swap = *str1;
*str1 = *str2;
*str2 = *swap;
}
结论:C++很强大很麻烦,只要找对方法,似乎做什么事情都比别的语言快,不过也不值得为了一倍两倍的加速去重新学习一门麻烦的语言。
直接把VBA代码在VB编译器优化编译就很好了。
[ 本帖最后由 灰袍法师 于 2011-6-4 04:56 编辑 ] |
|