Влияют ли флаги оптимизации компилятора c ++ на совместимость ABI? - PullRequest
0 голосов
/ 20 сентября 2019

Я смутно помню из разговоров с коллегами, что изменение флагов компилятора может нарушить совместимость ABI.Я не уверен, так ли это всегда, или это относится ко всем флагам.

В частности, мне интересно, есть ли флаги оптимизации (например, gcc -O2, gcc-O3) или, если быть более точным,, флаги, связанные с векторизацией SIMD (например, gcc -mavx2 или gcc -msse3), могут вызвать проблемы совместимости ABI.

Я пишу библиотеку концепций, которая использует стороннюю общую библиотеку с закрытым исходным кодом (на самом деле,dlls, потому что мы на окнах).

Я думаю о правильном распределении памяти и включении векторизации с помощью флагов компилятора (/ ARCH: AVX2, например, для MSVC).

Мне интересно, не нарушит ли это совместимость с dllПоставляется сторонним поставщиком.

Если это так, то на уровне дизайна гораздо меньше о чем думать.Если этого не произойдет, мне придется подумать о реализации своих собственных распределителей памяти и т. Д.

Я ожидаю, что флаги оптимизации влияют только на генерацию кода, а не на макет памяти, и я понимаю, что совместимость ABI должнаделать с макетом памяти.

...