gpt4 book ai didi

c# - 值类型何时存储在堆栈中(C#)?

转载 作者:行者123 更新时间:2023-11-30 18:56:44 24 4
gpt4 key购买 nike

当我读下一本书的“值和引用类型”一章时,我想到了一个问题:“值类型何时存储在堆栈中”?因为程序员无法在类外初始化任何值类型。因为当我们在类中初始化一些值类型的变量时,变量存储在堆中。

我的问题是:值类型什么时候存储在栈中?

最佳答案

嗯,首先,您很少需要知道,但基本上,值类型存储在它们拥有的地方

当它们是线程执行流的一部分时,它们被存储在堆栈上,这可能意味着:

  • 在“局部”(方法变量)中——排除某些情况(下文)
  • 作为方法的一部分中的 float 值,即即将作为值传递给另一个方法的一个方法的返回值 - 不涉及“本地”,但该值仍在堆栈中
    • 按值传递的值类型参数(即没有 refout)只是一个特例
  • 在另一个值类型的实例“字段”(一个类型变量)中,该值类型本身在堆栈中(出于上述原因)

在以下情况下,它们存储在堆上(作为对象的一部分):

  • 在类的实例“字段”中
  • 在自身位于堆上的值类型上的实例“字段”中
  • 在一个静态的“领域”
  • 在数组中
  • 在作为迭代器 block 、异步方法的一部分的“局部”(方法变量)中,或者是 lambda 或匿名方法中的“捕获”变量(所有这些都会导致局部变量被提升到由编译器生成的类的字段)
  • 当“装箱”时 - 即转换为引用类型(objectdynamicEnumValueType(是的:ValueType 是一个引用类型;有趣,是吧?),ISomeInterface 等)

关于c# - 值类型何时存储在堆栈中(C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18375946/

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