好吧..首先我需要一些东西来解决这个问题,但我需要它快!不幸的是,“更好”的方式是将近 600 行代码!!! 请原谅它的名称与它所做的事情没有任何关系。正确的名称是 Integer64ToCharArray(int64_t value);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
随意尝试清理代码而不影响性能。
输入:从最小值到最大值范围内的任何有符号 64 位值。
示例:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
输出:
Test: 9223372036854775807
Test: -9223372036854775808
原始速度测试:(Integer64ToCharArray();)
最佳情况 1 位数值。
循环:100,000,000,花费的时间:1,381(Milli),每个循环的时间 13(Nano)
Worse Case 20 数字值。
循环数:100,000,000,花费时间:22,656(Milli),每循环时间 226(纳米)
新的设计速度测试:(AddDynamicallyToBuffer();)
最佳情况 1 位数值。
循环:100,000,000,花费时间:427(Milli),每循环时间 4(Nano)
32 位最坏情况 - 11 位值。
循环:100,000,000,花费的时间:1,991(Milli),每个循环的时间 19(Nano)
负 1 万亿最坏情况 - 14 位值。
循环:100,000,000,花费时间:5,681(Milli),每循环时间 56(Nano)
64 位更坏情况 - 20 位数值。
循环:100,000,000,花费时间:13,148(Milli),每循环时间 131(Nano)
工作原理!
我们执行分而治之的技术,一旦我们现在获得了字符串的最大长度,我们只需单独设置每个字符值。如上面的速度测试所示,较大的长度会导致较大的性能损失,但它仍然比原始循环方法快得多,并且在两种方法之间实际上没有代码更改,除非循环不再使用。
在我的使用中,因此名称我返回偏移量,并且我不编辑 char 数组的缓冲区,而是开始更新顶点数据,并且该函数有一个额外的偏移量参数,因此它没有初始化为 -1。