呵呵仙8 发表于 2023-10-29 22:46:24

发现文本到长整数 ()和文本到整数 ()有趣的问题


大家有没发现,文本到长整数 ()比文本到整数 ()执行效率还要高!!
以计次循环 (100000000)为例.转化为整数花费时间2700毫秒左右!
而转化为长整数花费时间0毫秒!(编译为发布版速度)目测,最少3000倍效率!这个StrToN64函数是吴总自创的算法吗?_ttoi函数也是自创的吗?当初为何不用StrToN64函数的返回值强转为int返回为整数.文本到整数 ()不就速度飞起来了?省时省脑!如下图:

Xelloss0618 发表于 2023-10-29 23:45:23

你的测试代码有问题吧,单单计次循环那么多次就不可能是 0 毫秒,C++ 的编译优化会将你的无效代码删除掉。
使用 #pragma optimize( "", off) 禁用编译优化后,实际性能差距应该是 5 倍左右。

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

长整数不能无脑强制转换成 32 位整数,因为转换的原则是直接砍掉后面 4 个字节。
比如长整数值 5000000000 (0x00F2052A01000000),强转到整数后是 705032704 (0x00F2052A)。

山梦 发表于 2023-10-30 09:02:43

大佬厉害

CPUCN 发表于 2023-10-30 09:07:49

这么细节的地方都被你发现了

suyan 发表于 2023-10-30 09:14:10

占用时间应该是那个强转INT带来的

kantal 发表于 2023-10-30 09:42:43

这么细节的地方都被你发现了

IvzCX 发表于 2023-10-30 10:02:43

666

Xelloss0618 发表于 2023-10-30 11:35:58

昨天发的回复还没放出来,这里简单给个结论,你的测试代码没考虑编译优化,实际性能差距是5倍左右

suyan 发表于 2023-10-30 11:42:40

X大佬出结果就定案了,强转要占时间,不过相差几十倍,是不大可能

呵呵仙8 发表于 2023-10-30 12:19:03

suyan 发表于 2023-10-30 09:14
占用时间应该是那个强转INT带来的

会错意了.后图是个人建议"文本到整数()"源码变更为这样.速度才和"文本到长整数()"一样快!!
页: [1] 2
查看完整版本: 发现文本到长整数 ()和文本到整数 ()有趣的问题