使用const创建一次写入变量?

时间:2015-02-05 11:13:19

标签: c

在C中,有没有办法让静态U32可以在运行时提前初始化;但是其他代码看起来像const?

我的尝试:

static const U32 writeOnce = 0;

void init( U32 initVal ) {
    *(U32*)writeOnce = initVal;
}

接受语法;但是在运行时,writeOnce的其他只读用法已经直接嵌入到操作码中,并且变量被优化掉了。

我在想,也许外星人可能会工作;但不能围绕着我的大脑。

基本需要使对变量的读取引用尽可能地优化;一旦在运行时设置了值。

IE中。如果使用函数多次使用该值,则告诉编译器只需要从内存中读取一次值。

嗯。现在我把它拼写出来;我想我会失去运气(非易失性并不存在:),但无论如何我都会问这个问题,看看会发生什么。

干杯,Buk。

2 个答案:

答案 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;
  }
}