gpt4 book ai didi

c# - 为什么结构存储在堆栈中,而类存储在堆中(.NET)?

转载 作者:IT王子 更新时间:2023-10-29 04:17:46 26 4
gpt4 key购买 nike

我知道类和结构之间的区别之一是结构实例存储在堆栈中,而类实例(对象)存储在堆中。

因为类和结构非常相似。有人知道这个特殊区别的区别吗?

最佳答案

(编辑以涵盖评论中的要点)

要强调的是:值类型和引用类型之间存在差异和相似之处,但这些差异与堆栈和堆无关,而与复制语义和引用有关-语义。特别是,如果我们这样做:

Foo first = new Foo { Bar = 123 };
Foo second = first;

那么“first”和“second”是指 Foo 的同一个副本吗?或不同的副本?碰巧的是,堆栈是处理值类型作为变量的一种方便而有效的方式。但这是一个实现细节。

(结束编辑)

关于整个“值类型进入堆栈”的事情... - 值类型不要总是进入堆栈;

  • 如果它们是类中的字段
  • 如果它们是盒装的
  • 如果它们是“捕获的变量”
  • 如果它们在迭代器 block 中

然后他们继续堆(最后两个实际上只是第一个的奇特例子)

class Foo {
int i; // on the heap
}

static void Foo() {
int i = 0; // on the heap due to capture
// ...
Action act = delegate {Console.WriteLine(i);};
}

static IEnumerable<int> Foo() {
int i = 0; // on the heap to do iterator block
//
yield return i;
}

此外,Eric Lippert(如前所述)有一个 excellent blog entry关于这个问题

关于c# - 为什么结构存储在堆栈中,而类存储在堆中(.NET)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/815354/

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