有两种类型:
首先是存储在堆栈上的值类型,第二个是存储在堆上的引用类型。
现在,如果我们有一个静态变量,那么就说:
static int a= 10;
static string str = "Question";
如何完成内存分配?
如果我们有一个结构:
Struct struct
{
int i;
static string name;
float f;
};
如何为此结构分配内存?
答案 0 :(得分:1)
首先是存储在堆栈上的值类型,第二个是存储在堆上的引用类型。
这是一个经常重复的陈述,但它不是真的。如何存储变量是一个“实现细节”。
语言规范不能完全避免引用类型的实例存储在堆上的事实,但对于局部变量,无论是值类型还是对实例的引用,故事都不是那么简单。
class A { int b; } // int b is of a value-type but will always live on the Heap
void M() { int a, b; ... x => a+1; ... } // a stored different from b
并未真正指定static
字段的存储方式。它也与C#程序员无关。
实际上它们存储在静态段中,该段既不是堆栈也不是堆。但我认为它们实际上是作为Type的一部分分配给Heap。可能在运行时间之间变化的实现细节。
答案 1 :(得分:0)
静态与内存分配无关,静态只意味着可以在不创建实例的情况下访问该字段。
string是一个引用类型,因此它在堆上分配,无论它是静态字段还是非静态字段。