结构,堆和堆栈 - 内存管理

时间:2015-07-29 16:09:54

标签: c# memory struct stack heap

我一直在读一本关于C#的书,并且遇到了将值存储在内存中的主题。始终在堆上创建引用类型的实例,但是变量的值存在于声明的任何位置。只有局部变量(在方法[非匿名]中声明的变量)和方法参数才会存在于堆栈中。

所以我的问题是 - 如果我将这些结构声明为这样的局部变量 - 它们会全部放在堆栈上吗?

struct A<T> where T : struct { }

struct B<T> where T : class { }

struct C { }

我只是想知道struct的内容是否会影响它在内存中的存储位置。

谢谢,C#gurus!

1 个答案:

答案 0 :(得分:1)

结构去你告诉他们去的地方。

如果它们在函数中声明为局部变量,那么它们就在堆栈中。如果它们是类成员,那么它们就是在类的堆内存中内联。

如果一个struct包含一个类,那么该结构中的引用就像它是int或任何其他成员一样内联。类引用指向的东西是在堆