c – 为优化器提供更大的“许可证”

我知道volatile变量背后的概念.基本上所有对该变量的读写都必须发生.有没有办法允许优化器只完成所有写操作,并假设读取始终保持不变(除非通过写入修改).

另外(沿着相同的行)有一种方法来为编译器定义一种新类型的存储器来存储变量.例如,如果我有一个带SD卡的微控制器,我可以将SD卡定义为存储内存的地方(或者我必须自己完成所有的读/写操作).

为了记录,我使用gcc作为我的编译器,如果有什么我可以在gcc上专门(并且仅)做

最佳答案

I know the concept behind volatile variables.

好…

Basically all reads and writes to that variable must occur.

绝对不是“基本上”.

Is there a way to allow the optimizer to get away with only doing all of the writes and assuming that the reads will always stay the same (unless modified by writing).

没有

< - snip - >

volatile用于模拟对内存映射I / O的读/写访问. “写入”此类I / O通常会触发电子设备中的活动,即使写入的值与先前写入的值相同.

volatile没有其他用途 – 不,甚至在多线程中都没有(在任何情况下它都不会做你想要的).

来自§7.1.6.1

[ Note: volatile is a hint to the implementation to avoid aggressive optimization involving the object
because the value of the object might be changed by means undetectable by an implementation. Furthermore,
for some implementations, volatile might indicate that special hardware instructions are required to access
the object. See 1.9 for detailed semantics. In general, the semantics of volatile are intended to be the
same in C++ as they are in C. — end note ]

这里的含义是,除非您完全了解实现对volatile变量执行的操作,否则您无法使用它.

它的使用是不可移植的,所以如果使用它,应该包含在你正在处理的任何概念的特定于实现的特化中.

转载注明原文:c – 为优化器提供更大的“许可证” - 代码日志