我可以在堆棧中創建一個關於.net和C#的類的對象嗎? 例如:在堆棧中創建對象
class abc { int i=1; }
abc a1=new abc();
現在,這裏的對象是在堆中創建。那麼,如果對象的大小不是很大,有沒有辦法在ram的棧內存中創建對象?
我可以在堆棧中創建一個關於.net和C#的類的對象嗎? 例如:在堆棧中創建對象
class abc { int i=1; }
abc a1=new abc();
現在,這裏的對象是在堆中創建。那麼,如果對象的大小不是很大,有沒有辦法在ram的棧內存中創建對象?
.NET引用類型始終位於GC堆上。在其他地方不可能有他們。甚至C++/CLI支持之類的東西
System::Random rnd;
rnd.Next();
看起來像堆棧變量,實際上創建的Random
類,在GC堆(如果它實現IDisposable
在所述塊的端調用其Dispose
方法。)
也就是說,正如Eric Lippert所說,the stack is an implementation detail您應該主要關心您創建的類型的引用或值語義。
正如Mehrdad所說,引用類型實例(對象)和靜態變量一樣存儲在堆上。局部變量等存儲在堆棧中。
我不知道爲什麼你需要堆棧中的對象而不是堆。這個主要原因(至少我知道的主要原因)是RAII。 C++中的編譯器保證在堆棧上創建的每個對象在離開作用域時都會被銷燬。
在C#中存檔與使用語句同樣的事情:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
如果使用struct
而不是class
,您創建將在棧上創建一個值類型。有關於此的lots of things to consider。本書框架設計指南沒有提出具體的建議,但表明最好是對差異進行基準測試,並確定它是否真的值得實施一種價值類型。
你的意思是你自己的堆棧?或在objets堆棧? – 2009-07-28 14:48:09