![](/img/trans.png)
[英]Cleaning up after variable declaration, initialization and unamanaged memory allocation
[英]Variable Declaration & Memory Allocation
我想知道在局部變量聲明過程中是否分配了內存。
假設我在函數int a = 10中編寫了此代碼; 分配內存並在其中存儲值10。
那int呢? ? 該聲明語句會分配4個字節的內存嗎?
謝謝。
調用方法時,每個局部變量的空間都在堆棧上分配。
因此,如果您在方法中聲明一個int
變量,則它的堆棧幀將占用額外的4個字節的內存。
在其他任何地方都不會使用任何額外的內存,並且在方法返回時會清除它。
這里要理解的重要一點是,MSIL不支持在方法的任何地方聲明屬性。 每當您在C#中聲明變量時,該聲明就會移至已編譯字節碼中的方法標頭中。 調用方法時將分配每個變量。
局部變量通常存儲在堆棧中,因此確實為int
分配了字節:
int a;
因為它僅使用默認值(0),所以它與:
int a = 0;
int
是一種值類型,因此在堆棧上存儲其值。 如果要使用引用類型創建局部變量:
SomeClass a;
然后在堆棧上,它將僅分配給引用 (值為null,因為它是引用類型的默認值)。 有關更多信息,您可以參考此問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.