C ++ 11 introduce la semantica di spostamento che può, ad esempio, migliorare le prestazioni del codice in situazioni in cui C ++ 03 dovrebbe eseguire una costruzione o assegnazione di copie. Questo articolo riporta che il codice seguente presenta una velocità 5x quando viene compilato con C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
Qual è l'impatto della semantica del movimento C ++ 11 nel contesto dell'informatica scientifica?
Sono interessato a questa domanda è generale, ma più specificamente mi interessa anche spostare la semantica per i codici agli elementi finiti scritti usando le librerie boost. Ho testato parte del mio codice C ++ 03 usando la versione boost 1.47.0 (poiché le note di rilascio boost menzionano la semantica di movimento sono state introdotte in 1.48.0) e la versione 1.53.0 di boost, ma non ho notato molti miglioramenti. Immagino che qualsiasi risparmio derivante dal fatto di non dover eseguire la costruzione di copie per boost::numeric::ublas::vector
/ matrix
e boost::function
non sia evidente poiché la risoluzione delle matrici di sistema costituisce la maggior parte del carico di lavoro.
Modifica: in realtà sembra che la semantica di spostamento sia implementata solo per boost::function
(vedere le note di rilascio della versione 1.52.0 ). Non vi è alcuna menzione della semantica di spostamento boost::numeric
, ho attaccato le fonti per accertarmene e sembra che non ci siano riferimenti di valore.