2013-01-09 43 views
1

這個問題的靈感來自Python變量存儲的內存管理技術。我想用C語言實現一個類似的功能。設計變量存儲的內存塊

大型運行程序中的大多數變量通常具有值01。假設數據類型爲int的100個變量的值爲01,所以我們使用100 * sizeof(int) = 400字節的內存。相反,我們可以使用引用計數將每個變量指向以下結構,從而將內存使用量減少到只有幾個字節。當引用計數達到0時,該結構被解除分配。

struct var 
{ 
    int value; 
    int refCount; 
} 

我想實現的是,當我定義幾個int的,鏈表將如下所示:

void foo() 
{ 
    int a = 0, b = 0, c = 0; 
    int i = 1, j = 1; 
    int x = 7; 
    int p = 5, q = 5; 
} 

導致以下鏈接的列表

[Head] <-> [0,3] <-> [1,2] <-> [7,1] <-> [5,2] <-> [Tail] 

這裏a,bc指向節點[0,3]ij指向節點[1,2]等等。現在,我如何覆蓋變量的內存分配C並實現我自己的算法,如上所述? C++是否提供任何此類功能?

UPDATE:如果我們改變a = 9,然後一個新的節點創建爲[9,1]和以前的節點改爲[0,2]。當引用計數達到0時,它將被解除分配。

回答

0

你必須自己實現這個,它不會透明。你的變量不再是int,而是指向某個或某些東西的指針。

此外,請注意,在您的示例中,如果更改a,bc也將更改。

+0

因此,這是一個數字是恆定的要求。 –

+0

@zmbq:是的,變量不會是'int',而是指針。所以,我會在struct中包含一個新成員'datatype'。 –

+1

你*做*實現指針就像整數一樣大,對嗎? – zmbq

0

要麼你不知道數據的性質,那麼你必須做出動態的,其分配以特定的方式將數據作爲你所描述的算法。

或者你知道在編譯時數據的性質,然後你可以決定在你喜歡的方式來分配它。 「重寫C分配變量的方式」沒有任何意義,因爲在運行時,程序在編譯時計算自己需要的分配是沒有意義的。

實現這一目標的最好辦法也許是有一個生成C代碼的腳本。