У меня есть вопрос относительно оптимизации, которую потенциально может выполнить компилятор.
Приведенный ниже код говорит сам за себя (это пример):
typedef struct test
{
short i;
} s_test;
int function1(char *bin)
{
s_test foo;
lock(gmutex);
foo.i = *(int*)bin * 8;
unlock(gmutex);
sleep(5);
//
// Here anything can happen to *bin in another thread
// an inline example here could be: *(volatile int *)bin = 42;
//
int b = foo.i + sizeof(char*);
return (b > 1000);
}
Мог ли компилятор когда-либо заменить последние строки на
return ((*(int*)bin * 8 + sizeof(char*)) > 1000);
Это не похоже на случай использования -O2 или -O3 с gcc 4.4, но может ли быть так с другими компиляторами и с другими флагами компиляции?