3
我在我的類中有一個靜態變量,當我通過windbg/sos查看此對象時,它將此對象顯示爲固定。我認爲這意味着GC無法在其他地方分配這個對象。任何想法爲什麼靜態變量被視爲固定?靜態對象被固定並且不能被GC重新分配?
下面是這個變量的聲明在我班上
namespace ConsoleApplication1
{
class Program
{
static string Name = "Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
}
,這裏是輸出形式的WinDbg
0:004> !do 0231bb70
Name: System.String
MethodTable: 6c97f92c
EEClass: 6c6b8ba0
Size: 418(0x1a2) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String: Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Fields:
MT Field Offset Type VT Attr Value Name
6c9828f8 4000103 4 System.Int32 1 instance 202 m_stringLength
6c981d48 4000104 8 System.Char 1 instance 41 m_firstChar
6c97f92c 4000105 8 System.String 0 shared static Empty
>> Domain:Value 004f6588:02311228 <<
0:004> !gcroot 0231bb70
Scan Thread 0 OSTHread 2824
Scan Thread 2 OSTHread 1ae0
DOMAIN(004F6588):HANDLE(Pinned):1613f4:Root: 03312020(System.Object[])->
0231bb70(System.String)
DOMAIN(004F6588):HANDLE(Pinned):1613fc:Root: 03311010(System.Object[])->
0231bb70(System.String)
見!gcroot的輸出,這是顯示爲手柄(銷接) 。我誤讀這個輸出嗎?
這是不正確的一般。 – SLaks
爲什麼windbg節目是PINNED呢? –
你能顯示WinDbg輸出嗎? – vcsjones