【问题标题】:C++: Save global value to memory address - or alternative wayC ++:将全局值保存到内存地址 - 或替代方式
【发布时间】:2011-10-31 22:32:13
【问题描述】:

我目前正在调整一些用 C++ 编写的计算机游戏的像素着色器代码。我需要一种方法来存储全局值(整数或浮点数),以便以后可以检索(在同一进程中)。由于一切似乎都是在运行时“无状态”执行的,因此像我通常在这种情况下所做的那样简单地声明和使用静态变量(类变量)将无济于事。

因此,我想到了将全局值存储到特定内存地址,然后从那里获取它的想法。我的问题是我不知道这是否可能以及如何做到这一点。我阅读了这些问题,但到目前为止还没有找到答案:

Create new C++ object at specific memory address?

Pointer to a specific fixed address

Assigning A Specific Memory Address from another program, and changing it's value

Assign a value to a specific address

这在 Windows Vista 或 7 上是否可行,如果可以,如何实现?我没有选择包含任何库,但必须使用内置的 c++ 功能来实现任何目标。

如果不能(或不容易)实现,是否有其他方法可以真正全局存储某些值(而不是作为类变量),以便同一进程中的其他类/实例可以访问它?可能是 .NET 或 Java 中的某种会话或应用程序缓存?

任何帮助将不胜感激。

【问题讨论】:

  • “似乎是无状态执行”是什么意思? “数据存储在特定内存地址”与任何其他普通全局变量有何不同?
  • 我可能遗漏了一些东西,但全局变量不是解决方案吗?
  • Karl,我的意思是代码似乎不像在普通 c++ 应用程序中那样被执行,其中编译的类被加载到堆(或堆栈?不记得)并且所有静态变量也存储在那里,因此可以从类的所有实例中访问。就我而言,每个类实例似乎都在单独的内存区域中运行,甚至带有所有静态变量的类本身也会为每个实例加载到单独的内存中,而不是只加载一次。因此,“静态”关键字的行为并不像预期的那样,它在所有实例中都不是静态的。
  • Drakosha,请参阅我上面的评论以了解您所缺少的内容。通常,全局变量将是“默认”解决方案。不幸的是,由于特殊的内存处理,在这种情况下不是。

标签: memory object pointers location


【解决方案1】:

我必须承认我不明白为什么静态在你的情况下不起作用,所以我的建议也可能不起作用。 您是否可以像这样简单地使用单例:

class VariableStorage
{
public:
    int getVar(string name);
    void setVar(string name, int value);

    static VariableStorage* instance();

    //...

protected:
   VariableStorge() { static obj = 0; if(!obj) obj = new VariableStorage(); return obj; }
   // ...
}

【讨论】:

  • 谢谢,但我担心这对我没有帮助,因为您也在使用静态。还是您的意思是指针指示器 (*) 应该在这里起作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多