堆栈/堆中的 c# 内存分配发生

本文关键字:内存 分配 堆栈 | 更新日期: 2023-09-27 17:56:18

在 c# 中 堆栈/堆中的内存分配何时发生。是在运行时还是编译时。根据我的研究,我知道值类型和引用类型的所有内存分配都在运行时发生。这是对的吗?

堆栈/堆中的 c# 内存分配发生

在编译时会如何发生?程序尚未运行,无需在程序运行之前分配内存。这是常识,这应该在运行时发生(实际执行生成的 IL 时)。

内存管理 它还优化了它可能不会在创建变量时发生,而是在您第一次使用它时发生。

我认为您可能会混淆实际分配(这只能在程序实际运行时运行时发生)与分配计算/确定。例如,请考虑以下方法:

void Foo() 
{
    int i = 42;
    Console.WriteLine(i); 
}

编译器现在将静态(编译时)该i堆栈上需要 4 个字节的空间。但是,直到程序实际运行,才会进行实际分配。

此外,在 CLR 加载代码并将其传递给 JIT(实时编译器)之前,上述方法甚至不会编译为机器代码(任何操作(如分配)的先决条件)。当然,即使它这样做了,直到创建实际过程,操作系统甚至会分配一个内存地址空间供它使用......