Оптимизирует ли компилятор объектива-c Xcode для битовых сдвигов? - PullRequest
0 голосов
/ 25 июня 2010

Знает ли компилятор target-c в Xcode лучше или быстрее, если я использую битовое смещение для умножения и деления на степени 2?

NSInteger parentIndex = index >> 1; // integer division by 2

1 Ответ

1 голос
/ 25 июня 2010

Разве это не 1980-е? Разве процессоры не выполняют эти инструкции в одно и то же время в эти дни? Я помню, как в мои 68000 дней, когда деление составляло 100+ циклов и сдвиг составлял всего 3 или 4 ... я не был уверен, что это так, поскольку процессоры продолжают работать.

Почему бы вам не заставить компилятор сгенерировать файл ассемблера, посмотреть, что он генерирует, и запустить некоторые тесты.

Я нашел это в Интернете, что может помочь вам ... хотя это для 'C', я думаю, что большинство вариантов будут одинаковыми.

Q: How can I peek at the assembly code generated by GCC?

Q: How can I create a file where I can see the C code and its assembly
   translation together?

A: Используйте ключ -S (примечание: заглавная S) для GCC, и он будет передавать код сборки в файл с расширением .s. Например, следующая команда:

gcc -O2 -S -c foo.c

оставит сгенерированный код сборки в файле foo.s.

Если вы хотите увидеть код C вместе со сборкой, в которую он был преобразован, используйте командную строку, например:

gcc -c -g -Wa, -a, -ad [другие опции GCC] foo.c> foo.lst

, который выведет комбинированный листинг C / сборки в файл foo.lst.

Если вам нужно как получить код ассемблера, так и скомпилировать / связать программу, вы можете либо указать опцию -save-temps для GCC (при этом все временные файлы, включая файл .s, останутся в текущем каталоге). или используйте параметр -Wa, aln = foo.s, который инструктирует ассемблеру выводить перевод ассемблерного кода C (вместе с шестнадцатеричным машинным кодом и некоторой дополнительной информацией) в файл с именем =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...