Innanzitutto per rendere più leggibile il codice C++; Sto programmando compilatore, e ho dato:È possibile utilizzare char [] come parametri, return ed ecc eventuali problemi di prestazioni?
var swap = (int x, y) => { //Assign method that returns two ints, and gets two ints as parameter to variable named swap.
var NewX = y
var NewY = x
}
var increment = (int x) => {
var Result = x + 1
}
NOTA: Le funzioni restituiscono qualsiasi variabile che è prima lettera è maiuscola. swap
può essere utilizzato come ... = swap(x, y).NewX
, ma increment
può essere utilizzato come solo ... = increment(x)
.
Dopo un po 'di ottimizzazione ha generato: (Made swap
e increment
effettiva funzione invece di variabili, ed ottimizzate pila swap
s')
template<int BytesCount> struct rawdata { //struct from some header
char _[ BytesCount ];
inline char &operator[] (int index) {
return _[ index ];
}
};
//...
rawdata<8> generatedfunction0(rawdata<8> p) { // var swap = (int x, y) => {
return{ p[ 4 ], p[ 5 ], p[ 6 ], p[ 7 ], p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ] };
}
rawdata<4> generatedfunction1(rawdata<4> p) { // var increment = (int x) => {
rawdata<4> r = { p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ] };
++*((int*)&r[ 0 ]);
return r;
}
Sono quasi sicuro che non lo farà ++*((int*)&r[ 0 ]);
indirezione inutile, ma come circa return{ p[ 4 ], p[ 5 ], p[ 6 ], p[ 7 ], p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ] };
? C'è qualche fonte che garantisce che lo ottimizzerà come se fossero due interi che vengono messi in array invece di 8 o più istruzioni che mettono byte per byte? Non sto parlando solo di questo caso particolare, ma di qualcosa di simile.
Se dipende, quindi sto utilizzando GCC per compilare il codice generato.
Esistono pochissime garanzie in merito al codice generato da un compilatore dopo l'ottimizzazione. In questo caso, no, non c'è alcuna garanzia su come riempirà l'array di memoria, e sarei sorpreso se avesse fatto qualcosa di meglio di un riempimento byte per byte qui. –
@JasonR In questo caso particolare lo ha ottimizzato come se conoscesse il risultato. (Ho provato a fare 'printf', ecc.) Se vuoi vedere un esempio simile [dai un'occhiata] (http://stackoverflow.com/questions/26378197/è-il-componente-per-per-optimizzare-spaghetti -codice). – LyingOnTheSky