У меня есть исследование влияния __restricting некоторых указателей на C++-код при компиляции с помощью GCC-компилятора.Учитывается ли компилятор GCC C++ __restrict - утверждения?
Оказалось, что не только время выполнения остается таким же, но исполняемый файл, похоже, не изменился, размер в байтах точно такой же, как и раньше.
Мой GCC-версия
gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux)
и хотя он принимает это C++ - расширение при разборе, он, кажется, не рассматривать его при сборке кода. Таким образом, есть либо причина, что компилятор не знает, как использовать эту семантическую информацию, либо обработка этой информации полностью отключена.
Код выполняет множество операций хруста, поэтому он должен быть включен для целей тестирования. Вы можете помочь?
Без кода очень сложно что-либо сказать. Вполне возможно, что с тем, как написан код, ключевое слово '__restrict' ничего не покупает. Есть случаи (предполагается, что два указателя, указывающие на разные типы, никогда не указывают на одну и ту же память, если только один из них не является символом 'char *'), в котором он так или иначе принимается. – Omnifarious
Ключевое слово 'restrict' имеет очень специфический эффект для сгенерированной сборки. Вы должны использовать 'objdump' или' gcc -S', чтобы посмотреть на сборку, которую он генерирует, чтобы увидеть, что это за эффект. Размер вашего исполняемого файла и времени выполнения являются плохими критериями его эффекта. – greyfade
Вопрос еще не в том, помогает ли знание нескольких массивов, которые не пересекаются, для какой-либо помощи для компилятора, поскольку исполняемые файлы полностью совпадают с байтом для байта. Поэтому я думаю, что функция отключена в самом компиляторе. – shuhalo