回答
執行堆棧溢出時引發StackOverflowException。 Microsoft建議不要創建大於16字節的值類型。
建議不是因爲存在堆棧溢出的風險,因爲默認情況下,結構會在每次分配或傳遞給函數時被複制 - 而複製更多的字節需要更多時間。不過,這是一個非常好的建議。 – cHao 2012-02-21 06:57:52
是的,這就是爲什麼string是一個引用類型 – 2012-02-21 07:08:11
可以說我們有一個值類型的局部變量。存儲將分配到臨時池,這通常通過分配堆棧來實現。當存儲所有局部變量所需的存儲大小大於可用堆棧空間時會發生什麼?
你會得到一個「堆棧外」異常。我很好奇:當你用完堆棧時,你認爲會發生什麼其他行爲?
好,可能有某種包裝來存儲堆或編譯器錯誤的數據。這是缺乏我的知識,我沒有找到答案前stackoverflow – 2012-02-21 07:00:00
@YuriyVikulov:如果你知道你不會在堆棧上的空間,你當然可以將值存儲在堆 - 而是有多種的方式。你可以把它放到一個'object'中,或者使它成爲某種引用類型的成員,但更好的方法是創建一個值類型的數組,因爲數組永遠不會堆棧。但編譯器不會爲你做出這個決定。 – 2012-02-21 07:05:00
我明白,擁有8Mb結構並理解你所提供的解決方案是一種醜陋的風格。這是我好奇心的原因問題原因。 – 2012-02-21 07:08:46
- 1. 堆棧= java.lang.StackOverflowError的:堆棧大小8MB
- 2. Linux堆棧大小
- 3. Android堆棧大小
- 4. Tomcat7堆棧大小很小
- 5. FreeRTOS STM32鏈接器堆棧大小vs任務堆棧大小
- 6. 查找堆棧中的最大值和最小值
- 7. iphone os支持的最大堆大小和堆棧大小是多少?
- 8. 遞歸堆棧大小?
- 9. 固定大小堆棧Java
- 10. LINQ堆棧大小問題
- 11. 調用堆棧大小?
- 12. 增加堆棧大小c#
- 13. 增加AsyncTask堆棧大小?
- 14. 增加堆棧大小
- 15. 可變堆棧大小
- 16. java.lang.StackOverflowError:堆棧大小8MB
- 17. 遞歸堆棧大小
- 18. 達到的最大堆棧大小
- 19. Java和不同類型的堆棧
- 20. LuaJit增加堆棧/堆大小
- 21. 在linux中獲取每個進程的堆棧和堆棧的大小
- 22. android renderscript堆棧大小太小
- 23. 最大堆棧大小使用
- 24. 最大調用堆棧大小
- 25. 如何找到最大堆棧大小?
- 26. java集最大堆棧大小
- 27. 最大堆棧大小超過
- 28. 最大線程堆棧大小.NET?
- 29. 類型安全堆棧和Scala 2.10
- 30. 原始類型不變性和堆棧?
作爲參考,AFAIK C#不允許可變大小的結構體。如果結構給出了不同大小的外觀,它可能包含一個至少包含一些實際數據的引用類型。 – cHao 2012-02-21 07:01:00
大小不變。不同的類型 - 不同的大小 – 2012-02-21 07:02:23
啊..這使得更多的感覺:) – cHao 2012-02-21 07:03:23