Я смутно помню из разговоров с коллегами, что изменение флагов компилятора может нарушить совместимость ABI.Я не уверен, так ли это всегда, или это относится ко всем флагам.
В частности, мне интересно, есть ли флаги оптимизации (например, gcc -O2, gcc-O3) или, если быть более точным,, флаги, связанные с векторизацией SIMD (например, gcc -mavx2 или gcc -msse3), могут вызвать проблемы совместимости ABI.
Я пишу библиотеку концепций, которая использует стороннюю общую библиотеку с закрытым исходным кодом (на самом деле,dlls, потому что мы на окнах).
Я думаю о правильном распределении памяти и включении векторизации с помощью флагов компилятора (/ ARCH: AVX2, например, для MSVC).
Мне интересно, не нарушит ли это совместимость с dllПоставляется сторонним поставщиком.
Если это так, то на уровне дизайна гораздо меньше о чем думать.Если этого не произойдет, мне придется подумать о реализации своих собственных распределителей памяти и т. Д.
Я ожидаю, что флаги оптимизации влияют только на генерацию кода, а не на макет памяти, и я понимаю, что совместимость ABI должнаделать с макетом памяти.