C ++ 11 แนะนำซีแมนทิกส์การย้ายที่สามารถยกตัวอย่างเช่นปรับปรุงประสิทธิภาพของรหัสในสถานการณ์ที่ C ++ 03 จะต้องดำเนินการสร้างสำเนาหรือคัดลอกการกำหนด นี้บทความรายงานว่ารหัสต่อไปนี้ประสบการณ์ความเร็ว 5x ขึ้นเมื่อรวบรวมกับ C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
ผลกระทบของการย้ายความหมาย C ++ 11 ในบริบทของการคำนวณทางวิทยาศาสตร์คืออะไร?
ฉันสนใจในคำถามนี้เป็นเรื่องทั่วไป แต่โดยเฉพาะฉันยังสนใจที่จะย้ายซีแมนทิกส์สำหรับรหัสไฟไนต์อิลิเมนต์ที่เขียนโดยใช้ห้องสมุดเพิ่ม ฉันทดสอบโค้ด C ++ 03 ของตัวเองบางตัวโดยใช้บูสต์รุ่น 1.47.0 (ตั้งแต่รีลีสโน้ตที่กล่าวถึงการย้ายความหมายมีการแนะนำใน 1.48.0) และบูสต์รุ่น 1.53.0 แต่ฉันไม่ได้สังเกตเห็นการปรับปรุงมากนัก ฉันเดาว่าเงินออมใด ๆ ที่ไม่ต้องทำสำเนาสำหรับboost::numeric::ublas::vector
/ matrix
และboost::function
ไม่สามารถสังเกตเห็นได้เนื่องจากการแก้เมทริกซ์ของระบบถือเป็นภาระงานจำนวนมาก
แก้ไข:จริง ๆ แล้วดูเหมือนว่าซีแมนทิกส์ย้ายมีการใช้งานเฉพาะสำหรับboost::function
(ดูบันทึกย่อประจำรุ่น 1.52.0 ) ไม่มีการกล่าวถึงความหมายการย้ายในboost::numeric
ฉันทำซ้ำแหล่งที่มาเพื่อให้แน่ใจและดูเหมือนจะไม่มีการอ้างอิงค่า rvalue