Ob'ekt bayonnomasini ko'chadan kiritish uchun ishlash jazosi bormi?

Misol uchun, menda quyidagi qism mavjud

for ( i = 1..100000 ) {
    String s = make_some_string(i);//this function depends on `i` only
    output_this_result(s);
}

String s deklaratsiyasi ifodadan tashqarida ko'chirilsa, u har qanday farqni keltirib chiqaradimi? Menimcha, derleyici har bir loopda mag'lubiyat ob'ektini qurish va yo'q qilish uchun etarlicha aqlli. Lekin string amalga ob'ekt ni murakkablashtirsa nima bo'ladi?

0
E'tiborli jihati bilan yangi mag'lubiyat ishlab chiqariladi va make_some_string() tomonidan tayinlanadi va keyinchalik har bir iteratsiya paytida yo'q qilinadi. Har ikki urinishdagi farqni o'lchashga harakat qildingizmi? Siz nima qildingiz?
qo'shib qo'ydi muallif moooeeeep, manba
E'tiborli jihati bilan yangi mag'lubiyat ishlab chiqariladi va make_some_string() tomonidan tayinlanadi va keyinchalik har bir iteratsiya paytida yo'q qilinadi. Har ikki urinishdagi farqni o'lchashga harakat qildingizmi? Siz nima qildingiz?
qo'shib qo'ydi muallif moooeeeep, manba
Viktorina qiling. Yaratilgan asmga qarang.
qo'shib qo'ydi muallif Jesper Juhl, manba
Viktorina qiling. Yaratilgan asmga qarang.
qo'shib qo'ydi muallif Jesper Juhl, manba
Iltimos, 80/20 qoidasini yodda tuting - o'lchamlarni optimallashtirishga harakat qiling. Buning oldini olish uchun ko'p vaqt sarflashingiz mumkin.
qo'shib qo'ydi muallif Ed Heal, manba
Iltimos, 80/20 qoidasini yodda tuting - o'lchamlarni optimallashtirishga harakat qiling. Buning oldini olish uchun ko'p vaqt sarflashingiz mumkin.
qo'shib qo'ydi muallif Ed Heal, manba
Iltimos, 80/20 qoidasini yodda tuting - o'lchamlarni optimallashtirishga harakat qiling. Buning oldini olish uchun ko'p vaqt sarflashingiz mumkin.
qo'shib qo'ydi muallif Ed Heal, manba
Menimcha, JesperJuhlning fikri barcha optimallash tashabbuslari uchun juda mos keladi.
qo'shib qo'ydi muallif CodeMonkey, manba
Menimcha, JesperJuhlning fikri barcha optimallash tashabbuslari uchun juda mos keladi.
qo'shib qo'ydi muallif CodeMonkey, manba
Menimcha derleyici etarli darajada aqlli, lekin testga muhtoj.
qo'shib qo'ydi muallif Ron Tang, manba
Menimcha derleyici etarli darajada aqlli, lekin testga muhtoj.
qo'shib qo'ydi muallif Ron Tang, manba

6 javoblar

Ob'ektni deklaratsiyani bir pastadir ichiga qo'yish uchun ijro jazosi bormi?

Ehtimol bo'lishi mumkin. Ob'ektning turiga va kompilyator tomonidan oldindan tuzilgan optimallashtirishga bog'liq bo'lishi mumkin. Bundan tashqari, make_some_string (nusxa olish yoki konvertatsiya qilish yo'li bilan yaratilgan string ) va ehtimol, make_some_string bir xil tarjima birligida aniqlanganmi?).

Ob'ektni ichkarida e'lon qilsangiz, u har iteratsiya boshida quriladi va oxirida yo'q qilinadi. Konstruktor va buzg'unchi chaqirish ularni chaqirishdan ko'ra sekinroq bo'lishi mumkin. Qo'ng'iroqlar faqat yon ta'sirga ega bo'lmasa, ularni optimallashtirish mumkin va ularni amalga oshirish derleyici uchun ko'rinadi.

1
qo'shib qo'ydi

Ob'ektni deklaratsiyani bir pastadir ichiga qo'yish uchun ijro jazosi bormi?

Ehtimol bo'lishi mumkin. Ob'ektning turiga va kompilyator tomonidan oldindan tuzilgan optimallashtirishga bog'liq bo'lishi mumkin. Bundan tashqari, make_some_string (nusxa olish yoki konvertatsiya qilish yo'li bilan yaratilgan string ) va ehtimol, make_some_string bir xil tarjima birligida aniqlanganmi?).

Ob'ektni ichkarida e'lon qilsangiz, u har iteratsiya boshida quriladi va oxirida yo'q qilinadi. Konstruktor va buzg'unchi chaqirish ularni chaqirishdan ko'ra sekinroq bo'lishi mumkin. Qo'ng'iroqlar faqat yon ta'sirga ega bo'lmasa, ularni optimallashtirish mumkin va ularni amalga oshirish derleyici uchun ko'rinadi.

1
qo'shib qo'ydi

Ob'ektni deklaratsiyani bir pastadir ichiga qo'yish uchun ijro jazosi bormi?

Ehtimol bo'lishi mumkin. Ob'ektning turiga va kompilyator tomonidan oldindan tuzilgan optimallashtirishga bog'liq bo'lishi mumkin. Bundan tashqari, make_some_string (nusxa olish yoki konvertatsiya qilish yo'li bilan yaratilgan string ) va ehtimol, make_some_string bir xil tarjima birligida aniqlanganmi?).

Ob'ektni ichkarida e'lon qilsangiz, u har iteratsiya boshida quriladi va oxirida yo'q qilinadi. Konstruktor va buzg'unchi chaqirish ularni chaqirishdan ko'ra sekinroq bo'lishi mumkin. Qo'ng'iroqlar faqat yon ta'sirga ega bo'lmasa, ularni optimallashtirish mumkin va ularni amalga oshirish derleyici uchun ko'rinadi.

1
qo'shib qo'ydi

Uchinchi parametrni kamroq uchratasiz, bu esa, faqatgina Stringni loop yoki tashqarida e'lon qilinishi kerakligini so'raganingizda samaraliroq bo'lishi mumkin.

Tasavvur qiling:

for ( i = 1..100000 ) {
    output_this_result(make_some_string(i));//Depend on `i` only
}

s ni butunlay olib tashlab, qaerga e'lon qilishingizni hal qilish shart emas. Shubhasiz, bu output_this_result simvolli mos yozuvlar olmaydigan va uni o'zgartirishni talab qiladigan, lekin mantiqiy ko'rinadigan ismni talab qilganligi aniq. Va shunga qaramay, menimcha, har qanday kompilyator muqobilga nisbatan yomon kod ishlab chiqaradi.

(For-loop sintaksisi C ++ kabi ko'rinmaydi, lekin bu savolning bir qismi edi.)

0
qo'shib qo'ydi

Uchinchi parametrni kamroq uchratasiz, bu esa, faqatgina Stringni loop yoki tashqarida e'lon qilinishi kerakligini so'raganingizda samaraliroq bo'lishi mumkin.

Tasavvur qiling:

for ( i = 1..100000 ) {
    output_this_result(make_some_string(i));//Depend on `i` only
}

s ni butunlay olib tashlab, qaerga e'lon qilishingizni hal qilish shart emas. Shubhasiz, bu output_this_result simvolli mos yozuvlar olmaydigan va uni o'zgartirishni talab qiladigan, lekin mantiqiy ko'rinadigan ismni talab qilganligi aniq. Va shunga qaramay, menimcha, har qanday kompilyator muqobilga nisbatan yomon kod ishlab chiqaradi.

(For-loop sintaksisi C ++ kabi ko'rinmaydi, lekin bu savolning bir qismi edi.)

0
qo'shib qo'ydi

Uchinchi parametrni kamroq uchratasiz, bu esa, faqatgina Stringni loop yoki tashqarida e'lon qilinishi kerakligini so'raganingizda samaraliroq bo'lishi mumkin.

Tasavvur qiling:

for ( i = 1..100000 ) {
    output_this_result(make_some_string(i));//Depend on `i` only
}

s ni butunlay olib tashlab, qaerga e'lon qilishingizni hal qilish shart emas. Shubhasiz, bu output_this_result simvolli mos yozuvlar olmaydigan va uni o'zgartirishni talab qiladigan, lekin mantiqiy ko'rinadigan ismni talab qilganligi aniq. Va shunga qaramay, menimcha, har qanday kompilyator muqobilga nisbatan yomon kod ishlab chiqaradi.

(For-loop sintaksisi C ++ kabi ko'rinmaydi, lekin bu savolning bir qismi edi.)

0
qo'shib qo'ydi