Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Когда может понадобиться ручная работа с памятью, спросите Вы?
Например, для копирования массива байтов.
float f = ...;
unsafe { int i = *(int*)&f; }
Регистры процессора || FastCall

System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegions();try {} finally { /*Важный код, который нельзя прерывать*/ }
Ну и чтобы окончательно убедиться в том, что m_firstChar является указателем, рассмотрим, например, часть кода метода Join:
fixed (char* ptr = &text.m_firstChar) { UnSafeCharBuffer unSafeCharBuffer = new UnSafeCharBuffer(ptr, num); unSafeCharBuffer.AppendString(value[startIndex]); for (int j = startIndex + 1; j <= num2; j++) { unSafeCharBuffer.AppendString(separator); unSafeCharBuffer.AppendString(value[j]); } }
fixed (char* ptr = &text.m_firstChar) происходит обычная операция сложения — к адресу объекта text прибавляется смещение поля m_firstChar.fixed (char* ptr = somestring)
{
some_unmanged_code(ptr); //code copies string
}
Обратная сторона луны