小编Lon*_*olf的帖子

for循环被忽略(优化?)out

我使用for/while循环来实现代码中的延迟.延迟的持续时间在这里并不重要,尽管它足够大而值得注意.这是代码片段.

uint32_t i;

// Do something useful

for (i = 0; i < 50000000U; ++i)
{}

// Do something useful
Run Code Online (Sandbox Code Playgroud)

我观察到的问题是这个for循环不会被执行.它可能会被编译器忽略/优化.但是,如果我i通过volatile 限定循环计数器,则for循环似乎执行,我确实注意到执行中所需的延迟.

对于使用/不使用volatile关键字的编译器优化的理解,这种行为似乎有点违反直觉.

即使循环计数器得到优化并存储在处理器寄存器中,计数器是否仍然可以工作,也许延迟较小?(因为内存提取开销被废除了.)

我正在构建的平台是Xtensa处理器(由Tensilica提供),C编译器是由Tensilica提供的,Xtensa C/C++编译器以最高级别的优化运行.

我尝试使用gcc 4.4.7with -o3和ofast优化级别.在这种情况下,延迟似乎有效.

c timedelay delay compiler-optimization xtensa

6
推荐指数
1
解决办法
1081
查看次数

标签 统计

c ×1

compiler-optimization ×1

delay ×1

timedelay ×1

xtensa ×1