gpt4 book ai didi

.net - 静态类/成员在哪里分配?

转载 作者:行者123 更新时间:2023-12-01 11:59:06 25 4
gpt4 key购买 nike

自从我试图找出关于静态类的真相以来已经有很长时间了。我的观点是:使用 new 运算符时,值类型在堆栈中分配,在堆中分配引用类型。但是静态类的本质是您不能创建它的实例,并且确保它不是值类型。所以我有一个问题,CLR 何时何地为静态内容分配内存?关于什么时候......我想在编译期间,什么时候构建程序集,但我不确定。关于在哪里...当我试图找出我阅读 J.Richter 的“通过 C# 的 CLR”时,他写道,当您创建该特定实例的实例时,实例类的静态方法是在堆中分配的类(连同类型对象指针和同步块(synchronized block)索引)。但我不明白。它是静态的。它不应该依赖于对象的任何状态。所以请减轻我的负担。

最佳答案

CLR 维护多个与 AppDomain 关联的堆,统称为“加载器堆”。它们与垃圾收集堆不同,因为它们不包含可收集对象,主要是与类型相关的数据。在 AppDomain 的整个生命周期中都存在的数据类型。

静态变量的空间分配在其中之一,HighFrequencyHeap。 JIT 编译器进行分配,它生成的代码直接引用内存位置。背景信息在此MSDN Magazine article .

关于.net - 静态类/成员在哪里分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com