gpt4 book ai didi

C# 类大小计算

转载 作者:太空狗 更新时间:2023-10-30 00:36:37 33 4
gpt4 key购买 nike

在 C# (.NET) 中,方法(虚拟、静态、非虚拟)究竟如何影响类大小?

最佳答案

每个方法都占用内存来保存其字节码。每个方法 1 的代码都存在一次,而不是每个实例都存在一次。

添加和删除实例方法(虚拟或非虚拟)不会改变分配对象的大小。这不像 C++,在 C++ 中添加虚拟方法有时会增加分配对象的大小。与 C++ 一样,静态方法不会更改分配对象的大小。

¹ 对于泛型方法,实例化的每组类型都有一个副本。

编辑:作为对评论的回应,我将详细介绍。

@Richard:这可能是正确的,也可能不是正确的(可能会有所不同)。只需要一份 IL 字节代码。开放式构造方法和封闭式构造方法需要一个方法描述符 block ,加上仍然包含泛型类型参数的构造实例的描述符(在泛型类型定义的泛型参数化基类型中具有泛型参数的方法)。通常,将为每个封闭构造的实例保留一个 native 代码副本,该实例是一个值类型加上一个用于零个或多个引用类型,但可能有零个(不是 JIT/只是解释)或两个或更多(基线和优化编译器,自从使用优化 JIT 重新编译该方法以来,一个或多个调用堆栈未离开基线版本)。 再次编辑:您是正确的,因为通用参数约束只允许为其实例化的所有引用类型提供一份 native 代码副本。

关于C# 类大小计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322871/

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