Articles of ottimizzazione

Java: come verificare in modo efficiente i puntatori nulli

Esistono alcuni schemi per verificare se a un metodo è stato assegnato un valore null . Innanzitutto, quello classico. È comune nel codice auto-fatto e ovvio da capire. public void method1(String arg) { if (arg == null) { throw new NullPointerException(“arg”); } } In secondo luogo, è ansible utilizzare un framework esistente. Quel codice sembra […]

Le espressioni “j = ++ (i | i) e j = ++ (i & i); dovrebbero essere un errore di lvalue?

Mi aspettavo questo nel mio codice seguente: #include int main(){ int i = 10; int j = 10; j = ++(i | i); printf(“%d %d\n”, j, i); j = ++(i & i); printf(“%d %d\n”, j, i); return 1; } espressioni j = ++(i | i); e j = ++(i & i); produrrà errori lvalue come […]

Efficiente moltiplicazione di matrice 4×4 (C vs assemblaggio)

Sto cercando un modo più rapido e complicato per moltiplicare due matrici 4×4 in C. La mia attuale ricerca è incentrata sull’assemblaggio x86-64 con estensioni SIMD. Finora, ho creato una funzione che è circa 6 volte più veloce di un’implementazione ingenua C, che ha superato le mie aspettative per il miglioramento delle prestazioni. Sfortunatamente, ciò […]

Come utilizzare codici colore a 3 cifre anziché codici colore a 6 cifre in CSS?

Recentemente ho esaminato il mio file CSS e ho #FDFEFF tutti i miei codici esadecimali a 6 cifre in semplici codici a 3 cifre (ad esempio, il mio #FDFEFF stato abbreviato in #FFF ). Rende praticamente lo stesso colore di prima, mi sembra che le parti intermedie siano abbastanza inutili e rimuovendole mi hanno salvato […]

Bundle ASP.NET – Bundle non aggiornato dopo che il file incluso è cambiato (restituisce 304 non modificato)

Sto provando il bundle ASP.NET con l’applicazione ASP.NET MVC 4. La situazione è che voglio creare un servizio in stile CDN, che contiene file JS e CSS a cui è ansible accedere da altri siti con questo indirizzo di tipo: http://www.mycdn.com/scripts/plugin/js , che raggruppa e minimizza tutti i file .js inclusi. La mia configurazione di […]

Il puntatore punteggiato di Dereferencing interromperà le regole di aliasing severo

Ho usato il seguente pezzo di codice per leggere i dati da file come parte di un programma più grande. double data_read(FILE *stream,int code) { char data[8]; switch(code) { case 0x08: return (unsigned char)fgetc(stream); case 0x09: return (signed char)fgetc(stream); case 0x0b: data[1] = fgetc(stream); data[0] = fgetc(stream); return *(short*)data; case 0x0c: for(int i=3;i>=0;i–) data[i] = […]

Come determinare se la memoria è allineata?

Sono nuovo all’ottimizzazione del codice con le istruzioni SSE / SSE2 e fino ad ora non sono arrivato molto lontano. A mia conoscenza, una funzione comune ottimizzata per SSE sarebbe simile a questa: void sse_func(const float* const ptr, int len){ if( ptr is aligned ) { for( … ){ // unroll loop by 4 or […]

Qual è il guadagno dal dichiarare un metodo come statico

Recentemente ho esaminato i miei avvisi in Eclipse e ho trovato questo: Fornirà un avvertimento al compilatore se il metodo può essere dichiarato come statico. [modifica] Citazione esatta all’interno dell’aiuto di Eclipse, con stress su privato e finale: Se abilitato, il compilatore emetterà un errore o un avvertimento per i metodi che sono privati o […]

Perché GDB salta in modo imprevedibile tra le righe e stampa le variabili come “”?

Qualcuno può spiegare questo comportamento di gdb? 900 memset(&new_ckpt_info,’\0′,sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node->offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node->offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) […]

Posso restituire in modo efficiente un object in base al valore in Rust?

Vorrei inizializzare un object grande con una funzione. Attualmente ho: fn initialize(mydata: &mut Vec<Vec>) { /* … */ } Preferirei avere: fn initialize() -> Vec<Vec> { /* … */ } Ho sentito dire che C ++ implementa spesso l’ottimizzazione del valore di ritorno (RVO), se sei fortunato e hai un buon compilatore. Possiamo disabilitare la […]