При изучении указателя через небезопасно я заметил что-то странное.
unsafe class Program
{
static unsafe void Main(string[] args)
{
int A = 111;
int B = 222;
int* C = &A;
Console.WriteLine("{0} A", (int)&A);
Console.WriteLine("{0} B", (int)&B);
Console.WriteLine("{0} *C", (int)*C);
Console.WriteLine("{0} &C", (int)&C);
Console.WriteLine("{0} C", (int)C);
Process proc = Process.GetCurrentProcess();
IntPtr startOffset = proc.MainModule.BaseAddress;
IntPtr endOffset = IntPtr.Add(startOffset, proc.MainModule.ModuleMemorySize);
Console.WriteLine("{0} ~ {1} original", startOffset, endOffset);
Console.WriteLine("{0}", (int)endOffset-(int)startOffset);
long memory = GC.GetTotalMemory(true);
Console.WriteLine("{0} memory", memory);
}
}
результат
11530536 A
11530532 B
111 * С
11530528 & C
11530536 C
7143424 ~ 7176192 оригинал
32768
33448 памяти
1-й, почему он находится за пределами начального и конечного адресов приложений?
Я знаю, что он разделен на кучу и стек, но я добавил класс, но результаты совпадают. Это вне диапазона.
2-й, Почему так много памяти используется?
Когда я добавил один int, я обнаружил, что объем добавленной памяти составляет 24.
Потому что все типы наследуют объекты?
Пожалуйста, дайте мне знать, если есть проблема с вышеуказанным кодом.