实例化一个对象时,它是否全部存储在内存中?

use*_*516 9 c# memory object

简单的问题,如果你有一个只有一个属性的类,以及许多(非静态)方法,每次你说'new object()'或者只是属性和方法时,都会存储一个全新的对象在一些'共同'的内存空间中,所以同一类型可以引用它?

因此,在实例化时间方面,是否有一个大类总是比一个小类更差?

Edu*_*tru 4

内存分配可能确实很耗时。尽管如此,我相信更清晰、更明显的资源消耗衡量标准是占用空间而不是实例化时间。

正如您已经说过的,方法,无论是否静态,只占用一次内存空间。引用this只是一个隐藏参数,它像任何其他参数一样从调用者发送到被调用代码,最后,所有方法都只是普通的函数(或例程)。

简而言之,所有静态字段也是如此。不要考虑属性。它们只是最终访问字段的方法的高级包装。

实例字段是每个实例占用空间的内容。但还有其他一些东西,比如运行时类型信息也会被分配。

简而言之,你的假设是正确的。

编辑

回顾一下:

  • 如果“大类”是指定义了很多方法的类,那么不会,实例化时间不会受到影响。
  • 另一方面,如果通过这个术语,您的意思是一个定义了很多实例字段的类,那么是的,实例化时间将会受到影响。

虽然这不是我快乐的地方(我几乎不知道ol'malloc实际上能对内存进行碎片整理有多好),但认为分配大量内存会花费更长的时间是一种奇怪的方式,我无法指出,就像这么说

“将数字 1024 和 2048 相加比将数字 3 和 4 相加需要更长的时间”

(假设所有 4 个数字都存储在相同数字类型的变量中)。

所以我会更担心内存消耗。我确信时间也会受到某种程度的影响,但可能是对数的