我有一个关于编译器可能做的优化的问题。
下面的代码不言自明(这是一个例子):
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);
在 gcc 4.4 中使用 -O2 或 -O3 似乎不是这种情况,但其他编译器和其他编译标志可能是这种情况吗?