WinDbg를 사용하여 .NET 프로세스의 메모리 덤프를 분석 중이며 힙에있는 모든 System.Int32 변수의 크기가 24 바이트으로보고되었음을 확인했습니다. 여기에 변수 중 하나에 해당 DumpObj 호출의 예 : WinDbg에서 System.Int32 변수를 24 바이트로 표시하는 이유는 무엇입니까?
0:000> !DumpObj /d 00000061c81c0e80
Name: System.Int32
MethodTable: 00007fff433f37c8
EEClass: 00007fff42e30130
Size: 24(0x18) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
00007fff433f37c8 4000456 8 System.Int32 1 instance 141 m_value
는 지금까지 내가 아는 한, 크기 선택 System.Int32 4 바이트로되어있다. 이 불일치의 원인은 무엇입니까?
일반적인 Skeet이 이에 대한 블로그 게시물을 작성했습니다. 64 비트에서 24 바이트는 "최소 크기"입니다. –
[여기] (https://codeblog.jonskeet.uk/2011/04/05/of-memory-and-strings/)는 해당 게시물입니다 (참조 용). –
힙에있는 경우 boxed입니다. 즉 일반적인 객체 오버 헤드 (x86에서는 객체 당 8 바이트, x64에서는 객체 당 16 바이트)가 있고 4/8 바이트 경계에 정렬해야하므로 12B x86에서 24B, x64에서 24B. – Groo