SORU
27 AĞUSTOS 2014, ÇARŞAMBA


Bu erken optimizasyon std::move()?

Ben aşağıdaki kodu var varsayalım:

int main()
{
    std::vector<std::string> strs;

    std::string var("Hello World");
    // Make some modifications to 'var'
    strs.push_back(std::move(var));
}

İşaret etmek istediğim örnek parçası std::move() kullanımıdır. Temelde push_back() çağrı üzerine bir kopya için endişeleniyorum. Gerçekten büyük ekliyorum dize sanırım. Hala std::move() olmadan derleyici kopyala () optimize uzakta nasıl emin değilim bu yüzden C 11 r-değeri başvurular öğrenme.

Kimse bu erken optimizasyon (kopya önlemek için istediğiniz her durumda zorlama hareketler, genel olarak) açıklayabilir mi? Eğer öyleyse, ben desenleri optimize ve otomatik bir hareket burada neden takip derleyici (ya da büyük olasılıkla izleyin) ne beklemeliyiz?

EDİT

Otomatik hamle başına nasıl anlarım şunu eklemek istiyorumdönüş değerleri fonksiyonçünkü NRVO/rvt li geçerlidir. Burada verdim, belirli bir örnek rvt li geçerli olmaz, emin değilim.

CEVAP
27 AĞUSTOS 2014, ÇARŞAMBA


Derleyici std::move() olmadan kopya () optimize uzakta olacağını nasıl emin değilim.

Sadece birçokzeki derleyici uzak optimize olabilir, Eğer kopya pahalı (çok uzun bir dize gibi) olabilir eğer daha iyi taşımak için.

Hareket etmeden şifreyi etkili aramalar dizileri

strlen  // count "Hello World"
malloc  // allocate memory for string var
strcpy  // copy data into var
malloc  // re-allocate vector
free    // deallocate old vector
malloc  // allocate new string
strcpy  // copy from var to new string
free    // destroy var

Hareket ile olur:

strlen  // count "Hello World"
malloc  // allocate memory for string var
strcpy  // copy data into var
malloc  // re-allocate vector
free    // deallocate old vector

Teorik olarak bir akıllı derleyici yapabilir dönüşüm otomatik olarak, ama derleyici görmek ile tüm katmanları soyutlama yürürlüğe giren kurucular ve yıkıcı ve vector üye fonksiyonlar oldukça zor, bu yüzden ispat kod olabilir dönüştürdü kaldırmak malloc free biraz karışık.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • hans peder sahl

    hans peder s

    22 Temmuz 2009
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006