わかりました..最初に、この質問が求めていることを行うものが必要でしたが、すぐに必要でした! 残念ながら、「より良い」方法は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(ミリ)、ループあたりの時間 13(ナノ)
最悪の場合の 20 桁の値。
ループ数: 100,000,000、所要時間: 22,656(ミリ)、ループあたりの時間 226(ナノ)
新しい設計速度テスト: ( AddDynamicallyToBuffer(); )
ベストケースの 1 桁の値。
ループ: 100,000,000、所要時間: 427(ミリ)、ループごとの時間 4(ナノ)
32 ビット最悪ケース - 11 桁の値。
ループ: 100,000,000、所要時間: 1,991(ミリ)、ループあたりの時間 19(ナノ)
負の 1 兆最悪のケース - 14 桁の値。
ループ: 100,000,000、所要時間: 5,681(ミリ)、ループあたりの時間 56(ナノ)
64 ビット最悪 - 20 桁の値。
ループ: 100,000,000、所要時間: 13,148(ミリ)、ループあたりの時間 131(ナノ)
使い方!
分割統治法を実行し、文字列の最大長になったら、各文字値を個別に設定します。上記の速度テストに示されているように、長さが大きくなるとパフォーマンスが大幅に低下しますが、元のループ メソッドよりもはるかに高速であり、2 つのメソッド間でコードが実際に変更されていないため、ループは使用されなくなりました。
私の使用法では、代わりにオフセットを返す名前であり、char 配列のバッファーを編集せず、頂点データの更新を開始し、関数にはオフセット用の追加パラメーターがあるため、-1 に初期化されません。