Pengoptimuman Pengkompil bagi Peruntukan Memori Timbunan
Persoalan sama ada pengkompil boleh mengoptimumkan peruntukan memori timbunan timbul daripada pemerhatian yang dilakukan oleh sesetengah penyusun pengoptimuman ini, manakala yang lain tidak. Khususnya, versi clang 3.0 dan lebih baru mengoptimumkan panggilan baharu dalam kod berikut:
int main() { int* mem = new int[100]; return 0; }
manakala g dan Visual Studio tidak. Ini menimbulkan kebimbangan bahawa pengoptimuman sedemikian mungkin melanggar peraturan seakan-akan, yang memerlukan penyusun menghasilkan gelagat yang boleh diperhatikan seolah-olah standard telah dipatuhi.
Pengoptimuman Dentang dan Peraturan Seolah-olah
Sejarah pengoptimuman clang menerangkan kesahihannya. Pengoptimuman Clang mengikuti N3664, yang membolehkan pengoptimuman sedemikian. Walau bagaimanapun, sebab-musabab keputusan ini masih boleh dipersoalkan.
Sebagai alternatif, peraturan seolah-olah boleh ditafsirkan untuk melarang pengoptimuman sedemikian kerana baharu boleh membuang pengecualian, yang akan menjejaskan tingkah laku yang boleh diperhatikan. Walau bagaimanapun, clang boleh berhujah bahawa ini adalah butiran pelaksanaan dan ia telah menentukan bahawa pengecualian tidak akan dilemparkan.
Operator Tanpa Lontar Baharu
Hujah untuk mengoptimumkan panggilan ke versi bukan melontar juga sah di bawah peraturan seolah-olah. Walau bagaimanapun, jika pengendali global gantian baharu ada, pengoptimuman berpotensi melanggar peraturan seolah-olah. Pengoptimuman terlalu agresif Clang sebelum ini, yang malah mengoptimumkan panggilan create() telah diperbetulkan dalam versi kemudian.
Kesimpulan
Keupayaan pengkompil untuk mengoptimumkan peruntukan memori timbunan kekal sebagai topik perbahasan, dengan potensi implikasi untuk peraturan seolah-olah dan tingkah laku kod. Walaupun pengoptimuman clang dibenarkan oleh N3664, beberapa hujah mencadangkan bahawa ia berpotensi melanggar peraturan seolah-olah dalam situasi tertentu. Adalah penting bagi pembangun untuk menyedari kehalusan ini dan mempertimbangkan akibat yang boleh diperhatikan daripada pengoptimuman tersebut.
Atas ialah kandungan terperinci Bolehkah Pengkompil Mengoptimumkan Peruntukan Memori Timbunan Tanpa Melanggar Peraturan Seolah-olah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!