在c#堆棧/堆中的內存分配何時發生。在運行時還是編譯期間?從我的研究中,我明白所有的內存分配都是在運行時間內爲值類型和引用類型發生的。它是否正確?堆棧/堆中的c#內存分配發生
0
A
回答
1
在編譯期間會發生什麼?程序尚未運行,程序運行前無需分配內存。這是常見的情況,應該在運行時發生(當實際執行生成的IL時)。
內存管理,也優化,當你只需要創建一個變量,可能不會發生,但是當你第一次使用它。
0
我想你可能會混淆的實際配置,它可以在程序實際運行,與分配計算/確定在運行時纔會發生。例如,考慮以下的方法:
void Foo()
{
int i = 42;
Console.WriteLine(i);
}
編譯器將現在靜態(編譯時間)i
將需要4個字節的堆疊上的空間。但是,直到程序實際運行時纔會發生實際分配。此外,直到CLR加載代碼並將其傳遞給JIT(即時編譯器),上述方法甚至不會被編譯爲機器代碼(任何操作(如分配)的先決條件)。當然,即使它沒有,它不是直到創建實際的過程中,該OS分配,甚至爲它使用的內存地址空間...
相關問題
- 1. 內存分配,堆棧和堆棧
- 2. Java堆和堆棧內存分配
- 3. 堆棧幀內存分配
- 4. C++堆棧與堆分配
- 5. C堆棧分配
- 6. C中的堆棧分配
- 7. C++在堆和堆棧上分配內存?
- 8. 基於堆棧的內存分配
- 9. Stackoverflow沒有發生,試圖找出是否分配堆棧或堆內存
- 10. C程序的堆棧和堆內存
- 11. C++是堆棧還是堆分配?
- 12. 對象分配在堆棧或堆C++
- 13. 在釋放C中分配的內存時發生堆損壞
- 14. POSIX調用堆棧內存分配
- 15. 遞歸堆棧內存分配
- 16. 內存分配(指針和堆棧)
- 17. 動態堆棧內存重新分配
- 18. 在.net中堆棧和堆內存分配
- 19. C++循環堆棧分配
- 20. 靜態,堆棧和堆內存分配的地址排序?
- 21. C堆棧內存佈局
- 22. 堆棧或堆棧分配不正確
- 23. 這個內存在哪裏分配 - 堆或堆棧?
- 24. 成員函數內存分配堆棧還是堆?
- 25. 爲什麼堆棧和堆都需要內存分配
- 26. 堆棧和堆棧內存存儲在C++
- 27. C++中的動態堆棧分配
- 28. Android中的堆棧內存
- 29. 受保護的堆對象堆棧vs堆棧分配
- 30. 棧和堆內存
是,內存分配不能在編譯時有發生。只有當程序運行時,該程序所需的所有對象('struct'或'class')纔會被加載到內存中。 – EvilTak
這是正確的...... – zerkms
有人可能會爭辯說,堆棧上的分配發生在編譯時。然後,再次,實際更改堆棧指針的指令必須在運行時執行。這是一個愚蠢的問題。也許你應該閱讀[堆棧和堆是什麼](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap)。 –