Sto lavorando a un progetto C++/Qt per Embedded Linux in cui siamo costantemente "impegnati" contro le limitazioni del nostro processore, specialmente quando si tratta di aggiornare i grafici nell'interfaccia utente. Grazie a queste limitazioni (e specialmente alla nostra situazione qualche tempo fa, quando le cose andavano ancora peggio), cerco di ottimizzare il codice sempre quando posso e se i costi di ottimizzazione sono minimi. Una delle ottimizzazioni che stavo facendo è quella di utilizzare sempre il valore intero corretto per la situazione che sto gestendo: qint8, qint16 e qint32 a seconda di quanto è grande il valore di cui ho bisogno.Dovrei preferire usare piccoli tipi di int (int8 e int16) in codice C++?
Ma qualche tempo fa ho letto da qualche parte che, invece di provare a utilizzare la dimensione minima del numero intero quando possibile, dovrei sempre preferire usare il valore intero relativo alla capacità del mio processore, cioè se il mio processore è 32 -bit oriented, quindi preferirei usare qint32 sempre anche quando non era richiesto un numero così grande. In un primo momento non sono riuscito a capire perché, ma suggerisco the answer to this question perché le prestazioni del processore sono maggiori quando deve funzionare con la sua "dimensione predefinita di numero intero".
Beh, non ne sono convinto. Prima di tutto non è stato fornito alcun riferimento effettivo a conferma di una tesi di questo tipo: non riesco a capire perché scrivere e leggere da uno spazio di memoria a 32 bit sarebbe più lento, quindi farlo con un numero intero a 32 bit (e la spiegazione fornita non era molto comprensibile , btw). In secondo luogo ci sono alcuni momenti nella mia app quando ho bisogno di trasferire dati da una parte all'altra, come quando utilizzo il meccanismo di segnali e slot di Qt. Dal momento che sto trasferendo i dati da un punto all'altro, i dati più piccoli non danno sempre un miglioramento rispetto ai dati più grandi? Intendo dire che un segnale che invia due caratteri (non per riferimento) non dovrebbe eseguire il lavoro più rapidamente, quindi inviare due interi a 32 bit?
Infatti, mentre la "spiegazione del processore" suggerisce di utilizzare le caratteristiche del processore, altri casi suggeriscono il contrario. Ad esempio, quando si ha a che fare con database, le conversioni this e this suggeriscono entrambi che vi è un vantaggio (anche se solo in alcuni casi) nell'utilizzo di versioni più piccole di numero intero.
Quindi, dopo tutto, dovrei preferire usare piccoli tipi di int quando il contesto lo consente o no? O esiste un elenco di casi in cui un approccio o l'altro è più propenso a fornire risultati migliori o peggiori? (Ad esempio, dovrei usare int8 e int16 quando uso i database, ma il tipo predefinito del mio processore in tutte le altre situazioni)
E come ultima domanda: Qt normalmente ha implementazioni int-based delle sue funzioni. In tali casi, l'operazione di cast non annulla ogni possibile miglioramento che si potrebbe avere usando gli interi minori?
AFAIK a seconda del processore, qualsiasi cosa più piccola di int è implicitamente trasmessa a int per eseguire operazioni. Comunque uso sempre il tipo giusto per mostrare ad altre persone quale sia la mia intenzione. – Robinson
Bjarne Stroustrup preferisce usare un int a meno che non si abbia bisogno di qualcosa di più o di bisogno di unsigned. – NathanOliver
Ha ragione, ma a volte in realtà vuoi che int8_t [4] abbia una dimensione di 4 byte, non 16. – Robinson