2012-04-22 3 views
2

У меня есть простой вопрос о компиляторе Eclipse CDT и GNU GCC.Оптимизация и отладчик компилятора GNU GCC

Приложение составляется в

  • режиме отладки, т.е. оптимизации = Отсутствует (-O0), отладка = Максимум (-g3), по сравнению с приложением собраны в
  • Оптимизированная режиме, т.е. Оптимизация = Максимум (-O3), Отладка = Нет.

Помимо разницы в производительности, является он гарантирует, что приложение составлено в этих 2 режиме генерирует точно же результаты?

Я собираюсь выпустить приложение для конечных пользователей, приложение основано на сервере, оно обрабатывает несколько многоадресных каналов данных. Может ли кто-нибудь предложить какой-либо совет, какой режим компиляции я должен выбрать для окончательной версии для своих конечных пользователей.

Спасибо.

+1

Вы определенно должны распространять оптимизированную сборку. Это может помочь http://goo.gl/2OlIZ. –

ответ

6

Гарантируется, что ваша программа будет давать те же результаты, если ваш код полностью соответствует стандартам. Существует много способов написания кода, который имеет «неопределенное поведение», которое фактически работает с неоптимизированной сборкой, но может быть нарушено при оптимизации.

Например, предположим, что у меня есть:

struct A 
{ 
    int i; 
}; 

struct B 
{ 
    int i; 
}; 

int main() 
{ 
    A a; 
    a.i = 10; 
    B* b = reinterpret_cast<B*>(&a); 
    std::cout << b->i << std::endl; 
    return 0; 
} 

Это почти наверняка распечатать 10, но компилятор может законно генерировать код, который делает что-то еще из-за strict aliasing rules

+0

Плюс для компиляции с O3 время компиляции имеет тенденцию быть более длинным, вы не так сильно развиваетесь при разработке приложения. – ther

Смежные вопросы