在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)。 –