ho notato che la mia applicazione nds funziona un po 'più veloce quando sostituisco tutte le istanze di byte con numeri interi. tutti gli esempi online mettono le istanze u8/u16 ogni volta che è possibile. c'è una ragione specifica per cui questo è il caso?Perché gli interi si elaborano più velocemente dei byte su NDS?
risposta
Il processore principale utilizzato da Nintendo DS è ARM9, un processore a 32 bit.
Riferimento: http://en.wikipedia.org/wiki/ARM9
In genere, la CPU eseguirà operazioni in word sizes, in questo caso, 32 bit. A seconda delle operazioni, dover convertire i byte in numeri interi o viceversa potrebbe causare uno sforzo supplementare sul processore. Questa conversione e la potenziale mancanza di istruzioni per valori diversi da numeri interi a 32 bit potrebbero causare la mancanza di velocità.
Complementare a quello che ha detto Daniel Li, l'accesso alla memoria su piattaforme ARM deve essere allineato alla parola, vale a dire che i recuperi di memoria devono essere multipli di 32 bit. Il recupero di una variabile di byte dalla memoria implica il recupero dell'intera parola contenente il byte pertinente e l'esecuzione delle operazioni bit-bit necessarie per adattarlo ai bit meno significativi del registro del processore.
Queste istruzioni extra vengono automaticamente emesse dal compilatore, dato che conosce l'allineamento effettivo delle variabili.
- 1. Perché si accumula più velocemente di un semplice ciclo?
- 2. Perché C# si compila molto più velocemente di C++?
- 3. Perché numpy.power è più lento per gli esponenti interi?
- 4. Leggere gli interi binari
- 5. Perché gli interi sono immutabili in Python?
- 6. cudaMemset() - imposta byte o interi?
- 7. Perché C# ha le espressioni regolari compilate più velocemente dei metodi equivalenti per le stringhe?
- 8. Come eseguire velocemente gli screenshot in Java?
- 9. Come eliminare più velocemente?
- 10. R: Perché l'approccio [[]] per inserire una lista più velocemente di $?
- 11. Perché lo stesso codice viene eseguito più velocemente nella discussione?
- 12. Perché gli array UInt16 sembrano aggiungersi più velocemente degli array int?
- 13. Come posso eseguire un montaggio dei minimi quadrati su più set di dati velocemente?
- 14. Perché la mia CPU improvvisamente funziona il doppio più velocemente?
- 15. Confezionamento efficiente di byte in numeri interi?
- 16. Come creare indici più velocemente?
- 17. Le pagine Web valide si caricano più velocemente?
- 18. Ruby o altre lingue funzioneranno più velocemente con Parrot?
- 19. Perché ifstream :: legge molto più velocemente rispetto all'utilizzo degli iteratori?
- 20. In Linux, perché perdo i pacchetti UDP se chiamo send() il più velocemente possibile?
- 21. Come si elaborano risposte http multipart in Ruby Net: HTTP?
- 22. Come si elaborano gli argomenti della riga di comando in java Swing Application Framework
- 23. Perché più spazi dei nomi?
- 24. Il php funziona più velocemente senza avvertimenti?
- 25. Arrotondare gli interi al multiplo più vicino di 10
- 26. Come caricare i frammenti più velocemente?
- 27. Perché non posso dividere gli interi in rapido?
- 28. UPDATE più velocemente in SQLite + BEGIN TRANSACTION
- 29. Perché Color usa Int32 su Byte?
- 30. Perché i byte interi sono memorizzati all'indietro? Questo vale solo per le intestazioni?
Puoi dare un esempio di codice specifico? Sospetto che tu stia vedendo esempi dichiarare variabili a 8/16 bit nelle strutture, e tu invece le usi come persone del posto. –