C ++ 11, örneğin C ++ 03'ün bir kopya oluşturma veya kopyalama ataması gerçekleştirmesi gereken durumlarda kod performansını artırabilecek taşıma semantiği sunar. Bu makalede , aşağıdaki kod C + 11 ile derlendiğinde 5 kat hızlanma yaşadığı bildirilmektedir:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
C ++ 11 hareket semantiğinin bilimsel hesaplama bağlamındaki etkisi nedir?
Bu soru genel ilgileniyorum ama daha spesifik olarak ben destek kütüphaneleri kullanılarak yazılmış Sonlu Eleman kodları için hareket semantiği ile ilgileniyorum. Destek sürüm 1.47.0'ı kullanarak kendi C ++ 03 kodumun bazılarını test ettim ( destek sürüm notları, hareket semantiğinin 1.48.0'da tanıtıldığından beri) ve sürüm 1.53.0'ı artırdığından, ancak çok fazla gelişme fark etmedim. Ben kopyalama-inşaat yapmak zorunda değil herhangi tasarruf tahmin boost::numeric::ublas::vector
/ matrix
ve boost::function
sistem matrisleri çözme iş yükünün büyük bir kısmını teşkil beri fark edilmez.
Düzenleme: Aslında hareket semantiği için uygulanır gibi görünüyor boost::function
(bkz. Sürüm 1.52.0 sürüm notları ). Hareket semantiğinden bahsedilmiyor, boost::numeric
emin olmak için kaynakları selamladım ve hiçbir rvalue referansı yok gibi görünüyor.