虚幻4中变量被优化掉的解决方案

来源:互联网 发布:c语言打开文本文件 编辑:程序博客网 时间:2024/05/29 19:22

虚幻四在运行时候总是出现变量被优化掉从而看不到值得问题,对于测试程序时候来说很麻烦。所以加上这一行就能去掉优化。。

#if PLATFORM_WINDOWS
#pragma optimize("",off) 
#endif


代码代码代码



#if PLATFORM_WINDOWS
#pragma optimize("",on) 
#endif



第二种方法:

volatile


典型的例子
?
1
for(int i=0; i<100000; i++);
这个语句用来测试空循环的速度的
但是编译器肯定要把它优化掉,根本就不执行
如果你写成
?
1
for(volatile int i=0; i<100000; i++);
它就会执行了
volatile的本意是“易变的”
由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static int i = 0;
int main(void)
{
    //...
    while(1)
    {
        if(i)
            dosomething();
    }
}
/*Interruptserviceroutine.*/
void ISR_2(void)
{
    i=1;
}
程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此
可能只执行一次对从i到某寄存器的读操作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。如果将变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)。此例中i也应该如此说明

0 0