Va bene .. in primo luogo avevo bisogno di qualcosa che facesse quello che questa domanda sta chiedendo, ma ne avevo bisogno RAPIDAMENTE! Purtroppo il modo "migliore" è di quasi 600 righe di codice !!! Perdonate il nome che non ha niente a che fare con quello che sta facendo. Il nome proprio era Integer64ToCharArray (valore int64_t);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
Sentiti libero di provare a ripulire quel codice senza ostacolare le prestazioni.
Ingresso: qualsiasi valore a 64 bit con segno da un intervallo minimo a un massimo.
Esempio:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
Produzione:
Test: 9223372036854775807
Test: -9223372036854775808
Test di velocità originali: ( Integer64ToCharArray (); )
Miglior valore a 1 cifra.
Loop: 100.000.000, tempo impiegato: 1.381 (Milli), Time Per Loop 13 (Nano)
Caso peggiore Valore a 20 cifre.
Loop: 100.000.000, tempo speso: 22.656 (Milli), tempo per loop 226 (Nano
Nuovi test di velocità di progettazione: ( AddDynamicallyToBuffer (); )
Miglior valore a 1 cifra.
Loop: 100.000.000, tempo impiegato: 427 (Milli), Time Per Loop 4 (Nano)
Caso peggiore a 32 bit: valore a 11 cifre.
Loop: 100.000.000, tempo speso: 1.991 (Milli), Time Per Loop 19 (Nano)
Negativo 1 trilione di caso peggiore - Valore a 14 cifre.
Loop: 100.000.000, tempo impiegato: 5.681 (Milli), Time Per Loop 56 (Nano)
Caso peggiore a 64 bit: valore di 20 cifre.
Loop: 100.000.000, tempo impiegato: 13.148 (Milli), Time Per Loop 131 (Nano)
Come funziona!
Eseguiamo una tecnica di divisione e conquista e una volta raggiunta la lunghezza massima della stringa, impostiamo semplicemente ogni valore di carattere individualmente. Come mostrato nei test di velocità sopra, le lunghezze maggiori ottengono grosse penalità in termini di prestazioni, ma è ancora molto più veloce del metodo loop originale e nessun codice è effettivamente cambiato tra i due metodi, a parte il looping non è più in uso.
Nel mio utilizzo da qui il nome restituisco invece l'offset e non modifico un buffer di array di caratteri piuttosto comincio ad aggiornare i dati dei vertici e la funzione ha un parametro aggiuntivo per l'offset quindi non è inizializzata a -1.