2009-05-05 27 views
4

我有一個只有10個變量的項目列表。但是這些項目有很多代碼,我想補充更多。我很好奇這將如何影響我的結構的大小。我的直覺告訴我,每個人都有一個堆棧,但有爭論被傳遞,而我可能沒有考慮到我不確定。那麼粗略地說,代碼添加到我的數據結構中有多少?代碼量是否使數據結構更大?

回答

10

代碼不會添加到您的結構的大小。

3

與類關聯的代碼通常不會每個實例重複一次,因此添加代碼不應影響您的數組列表的大小。

3

即使您將代碼放在與數據相同的一組大括號中,編譯器也會將它分離出來並放入不同的存儲器部分。

這樣,您只需要代碼的一個副本 - 沒有必要爲每個使用它的項目創建一個新副本。

只有在非常大的項目中,編譯後的代碼的實際大小才成爲問題;通常情況下,它並不比源文本大得多。在小程序中,通常最多隻有幾百K或者一兩個兆或兩個。現代機器不值得擔心。

+0

實際上,編譯後的代碼通常比源表示要小得多。 – 2009-05-05 06:00:08

1

代碼不存儲在堆上。

無論您創建了多少個對象,只會將代碼放在一個地方。

1

對象工作的類成員函數存儲方式不同,它對對象的大小沒有影響。在類中的數據成員將成爲對象的一部分,並且如果您更改變量的類型,則對象大小將會改變。

例如:

class Test 
{ 
    1. member functions 

    //it does not matter how many functions you have, this section does not contribute 
    // to object size 

    2. member variables 
    //this contributes to the object size, define an int or double etc will change the object size 
} 
1

每個對象不具有它自己的堆棧。堆棧是每個線程/進程,而不是每個對象。

2

對象實例的大小(大部分)是其數據成員的總和。函數成員不是按實例存儲的,並且對實例大小沒有影響。

你的程序每個線程有一個棧。當一個函數被調用時,堆棧內存被保留給該函數的每個參數和變量,並在返回時被釋放。

如果在沒有新建的函數中實例化對象,則該對象將存儲在堆棧中。如果使用new,則只有引用存儲在堆棧中,並且實例本身存儲在堆中。

:)