递归火山软件开发平台

标题: 发现文本到长整数 ()和文本到整数 ()有趣的问题 [打印本页]

作者: 呵呵仙8    时间: 2023-10-29 22:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: Xelloss0618    时间: 2023-10-29 23:45
你的测试代码有问题吧,单单计次循环那么多次就不可能是 0 毫秒,C++ 的编译优化会将你的无效代码删除掉。
使用 #pragma optimize( "", off) 禁用编译优化后,实际性能差距应该是 5 倍左右。

_ttoi 是 C 的函数,速度已经算好了,C++11 的 std::stoi 更是慢得出奇。

长整数不能无脑强制转换成 32 位整数,因为转换的原则是直接砍掉后面 4 个字节。
比如长整数值 5000000000 (0x00F2052A01000000),强转到整数后是 705032704 (0x00F2052A)。
作者: 山梦    时间: 2023-10-30 09:02
大佬厉害
作者: CPUCN    时间: 2023-10-30 09:07
这么细节的地方都被你发现了

作者: suyan    时间: 2023-10-30 09:14
占用时间应该是那个强转INT带来的
作者: kantal    时间: 2023-10-30 09:42
这么细节的地方都被你发现了
作者: IvzCX    时间: 2023-10-30 10:02
666
作者: Xelloss0618    时间: 2023-10-30 11:35
昨天发的回复还没放出来,这里简单给个结论,你的测试代码没考虑编译优化,实际性能差距是5倍左右
作者: suyan    时间: 2023-10-30 11:42
X大佬出结果就定案了,强转要占时间,不过相差几十倍,是不大可能
作者: 呵呵仙8    时间: 2023-10-30 12:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: numbersir    时间: 2023-10-30 13:22
这么细节的地方都被你发现了,牛逼
作者: yb1984724    时间: 2023-10-30 14:49
编译了看看C++代码是怎么写的?
作者: Xelloss0618    时间: 2023-10-30 15:35
呵呵仙8 发表于 2023-10-30 12:19
会错意了.后图是个人建议"文本到整数()"源码变更为这样.速度才和"文本到长整数()"一样快!! ...

直接强转是不准确的,你可以测试一下这个代码。
调试输出 (文本到长整数 ("5000000000"), 文本到整数 ("5000000000"), (整数)文本到长整数 ("5000000000"))

_ttoi 这个C函数比吴总的 StrToN64 只慢2到6倍左右。
作者: 呵呵仙8    时间: 2023-10-30 16:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 呵呵仙8    时间: 2023-10-30 18:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: Xelloss0618    时间: 2023-10-30 20:44
呵呵仙8 发表于 2023-10-30 18:18
我当初也认为是被编译优化了!

谁教你这样测性能的……
应该是 (14359 - 11625) / 14359,快19%
排除多余的代码,只用文本到整数,关闭编译优化我测出来是快 5 倍左右,默认编译优化是快 2~3 倍。
作者: 呵呵仙8    时间: 2023-10-30 21:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: 苹果2014    时间: 2023-11-1 17:08
文本到长整数 ()比文本到整数 ()执行效率还要高,那以后直接用文本到长整数 ()不就是快速了吗




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4