Memahami Limpahan Integer dalam GCC pada x86
Masalah:
Kod yang disediakan memasuki gelung tak terhingga pada GCC apabila mencuba limpahan integer dengan x86 seni bina:
int i = 0x10000000; while (i > 0) { i += i; }
Sebab:
Limpahan integer dalam GCC pada x86 ialah gelagat yang tidak ditentukan dan gelagat yang diperhatikan boleh berbeza-beza. GCC biasanya melaksanakan aritmetik integer menggunakan arahan integer x86, yang biasanya membalut pada limpahan. Walau bagaimanapun, dalam kes ini, pengkompil menganggap limpahan tidak dimaksudkan dan melakukan pengoptimuman yang menghasilkan gelung tak terhingga.
Penyelesaian:
Untuk memastikan kelakuan lilitan , kawalan limpahan eksplisit adalah perlu. Ini boleh dicapai dengan:
Pelaksanaan Alternatif:
Penjelasan Kod:
Kod pemasangan gelung bermasalah mendedahkan bahawa pengkompil mengoptimumkan ujian gelung berdasarkan andaian bahawa limpahan tidak akan berlaku. Akibatnya, gelung berterusan selama-lamanya.
Atas ialah kandungan terperinci Mengapa Kod Limpahan Integer Ini Menghasilkan Gelung Infinite dalam GCC pada x86?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!