2011-08-22 46 views
0

我目前正在調整一些用C++編寫的電腦遊戲中的像素着色器代碼。我需要一種方式來存儲一個全局值(整型或浮點型),以便可以稍後檢索(在同一進程中)。因爲一切似乎都是在運行時「無狀態地」執行的,所以無法像在這種情況下通常那樣簡單地聲明和使用靜態變量(類變量)。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或Windows 7,如果又怎樣?我沒有選擇包含任何庫,但必須使用內置C++功能來實現任何功能。

如果不是(或不容易)實現的,是否有其他方法可以在全局範圍內存儲某些值(而不是作爲類變量),以便可以在同一進程內使用其他類/實例訪問它?也許某種類似於.NET或Java的會話或應用程序緩存?

任何幫助,將不勝感激。

+1

你是什麼意思「似乎是無狀態執行」? 「數據存儲在特定的內存地址」與其他任何普通的全局變量不一樣嗎? –

+0

我可能錯過了一些東西,但不是全局變量的解決方案? – Drakosha

+0

卡爾,我的意思是,代碼似乎不像它在正常的C++應用程序中編譯的類加載到堆(或堆棧?不記得)中那樣執行,並且所有靜態變量也被存儲在那裏,因此可以從一個類的所有實例訪問。在我的情況下,每個類實例似乎都運行在一個單獨的內存區域中,甚至包含所有靜態變量的類本身也會爲每個實例加載到單獨的內存中,而不是隻爲所有內存加載一次。因此,「靜態」關鍵字的行爲並不像所預期的那樣,它並非對所有實例都是靜態的。 – Meltac

回答

0

我必須承認我沒有得到爲什麼靜態不會在你的情況下工作,所以我的建議也可能無法正常工作。 是否有可能爲你簡單地使用這樣的單例:

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; } 
    // ... 
} 
+0

謝謝,但我恐怕這不會對我的情況有所幫助,因爲您也使用靜態。或者你的意思是指針指針(*)應該在這裏執行這個技巧? – Meltac