Re[12]: Откуда эта лютая любовь к знаковым целым?
От: Reset  
Дата: 07.05.20 20:11
Оценка:
R>>Не очень понимаю, про какие проверки вы все говорите: godbolt (смотреть на серенькое и желтенькое, т.е. содержимое цикла).

V>Добавь -m32, или замени int на long, чтобы размер индекса совпадал с разрядностью платформы.


Ну, так в том и суть. Меняешь unsigned на unsigned long и код становится как с int. Т.е. на AMD64 почему-то не получается инкрементировать eax, а читать rax (с нулями в старших байтах), поэтому возникает лишняя команда (остальной код в цикле не меняется). А в случае с int сразу используется 64-х битный регистр, потому что переполнение int — UB и это используется для "оптимизации", в результате которой код со счетчиком типа int работает не как 32-х битный.

Никаких "проверок" в коде я не увидел. Увидел работу с unsigned в отдельном регистре и пессимизацию из-за того, что 32 бита приходится превращать в 64 для работы с указателем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.