我的目标是在 C 中迭代微控制器上的内存,并对每个单元执行两次连续读取操作,测试两者是否为零。我尝试按如下方式执行此操作:
volatile uint8_t* memory = MEMORY_START_ADDR;
for(uint8_t byte = 0; byte < MEM_SIZE_IN_BYTES; byte ++)
{
if(memory[byte] != 0) do_something();
if(memory[byte] != 0) do_something(); // check same location again
}
现在我想确保第二次读取操作没有被编译器优化掉。
据我了解,写作volatile uint8_t * memory = ...
将对象标记*memory
为易失性,因此至少memory[0]
不应优化两次访问。这是否也适用于所有连续访问*(memory + byte)
?