Я создал модуль, используя Inline :: C, и заметил некоторые неожиданные расхождения в производительности между его запуском на хосте MacOS и гостевой виртуальной машиной Linux. Рассматривая это, это произошло из-за того, что флаги компилятора C по умолчанию были другими. В MacOS они выглядят следующим образом:
-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -O3 -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"
против Centos 7:
-fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2 -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"
Основное различие для моего кода - O3 против O2, поэтому я изучил встроенные документы и использовал:
use Inline (C => Config => ccflags => '-O3');
Чтобы явно указать -O3
. В результате получается, что -O3 -O2
применяется таким образом, поэтому указание ccflags не перезаписывает значения по умолчанию, а просто добавляет перед их, что, в конце концов, не имеет никакого эффекта. Любая идея, откуда взято значение по умолчанию и / или как его перезаписать, чтобы указать желаемый уровень оптимизации.