我有一个关于编译器可能做的优化的问题。
下面的代码将说明问题(这是一个示例):
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);发布于 2012-06-05 15:31:55
我不认为编译器会做这样的优化。
unlock(gmutex)这是函数,编译器不能假定在解锁函数中bin指向的值是否会改变。
例如,也许bin来自一个globe。因此,bin的优化不能跨越函数调用。
https://stackoverflow.com/questions/10893148
复制相似问题