【问题标题】:Where memory is allocated for valuetypes which are inside a class when object of the class is created [duplicate]当创建类的对象时,为类内的值类型分配内存的位置[重复]
【发布时间】:2018-11-04 04:27:52
【问题描述】:

我们知道值类型在栈中分配内存,而引用类型在堆中分配。现在当我们创建一个类的对象时,它是一个引用类型,内存将在堆中分配,此时我有一个困惑,这些类中的值类型在哪里分配了内存?是堆还是栈?

【问题讨论】:

  • 我很快就通过了this explenation,但我认为这可能对您有所帮助。
  • 值类型变量位于声明它们的位置。如果声明为另一种类型的字段,它们将存在于 该类型中。如果值类型变量被声明为方法的局部变量,那么它将驻留在堆栈或寄存器中,具体取决于编译器优化。如果值类型变量被声明为另一个值类型的字段,如果该其他类型存在于方法的局部变量中,则第一个值类型将存在于堆栈或寄存器中的另一个值类型变量中,具体取决于。

标签: c# .net


【解决方案1】:

“值类型是在堆栈上创建的”过于简单化了。

变量的值类型方法内存在于堆栈中,而不是对堆上对象的引用。

字段的值类型(在类或结构中)作为连续的内存区域存在父类型中 - 所以如果父对象存在于堆栈上,那么值类型成员也将存在于栈中,而引用类型的值在栈中只有一个引用/指针。

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2014-02-24
    • 1970-01-01
    • 2015-02-24
    • 2014-11-18
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多