在C中,有没有办法让静态U32可以在运行时提前初始化;但是其他代码看起来像const?
我的尝试:
static const U32 writeOnce = 0;
void init( U32 initVal ) {
*(U32*)writeOnce = initVal;
}
接受语法;但是在运行时,writeOnce
的其他只读用法已经直接嵌入到操作码中,并且变量被优化掉了。
我在想,也许外星人可能会工作;但不能围绕着我的大脑。
基本需要使对变量的读取引用尽可能地优化;一旦在运行时设置了值。
IE中。如果使用函数多次使用该值,则告诉编译器只需要从内存中读取一次值。
嗯。现在我把它拼写出来;我想我会失去运气(非易失性并不存在:),但无论如何我都会问这个问题,看看会发生什么。
干杯,Buk。
答案 0 :(得分:3)
在这方面,我能看到帮助编译器的唯一方法是使用一个局部常量,它以某种方式从非常量初始化,例如
uint32_t gParam;
void init()
{
gParam = some_value;
}
void foo()
{
const uint32_t kParam = gParam;
// ... loops/function calls involving const kParam
}
我并不完全相信这会有助于优化,但值得一试。
答案 1 :(得分:0)
使用标志来控制写访问。
U32 writeOnce = 0; // Value reported before it is written once during runtime.
void init( U32 initVal ) {
static bool writeOnceFlag = 0;
if (writeOnceFlag == 0) {
writeOnceFlag = 1;
writeOnce = initVal;
}
}