Festes Statement in C #
-
03-07-2019 - |
Frage
Wir haben einen ähnlichen Code die folgenden in einem unserer Projekte. Kann mir jemand erklären (in einfachem Englisch), warum die feste Aussage hier gebraucht wird?
class TestClass
{
int iMyVariable;
static void Main()
{
TestClass oTestClass = new TestClass();
unsafe
{
fixed (int* p = &oTestClasst.iMyVariable)
{
*p = 9;
}
}
}
}
Lösung
Es legt den Zeiger im Speicher. Müll gesammelt Sprachen haben die Freiheit, für Effizienz Objekte um Speicher zu bewegen. Das ist alles für den Programmierer transparent, weil sie nicht wirklich verwenden Zeiger in „normalen“ CLR-Code. Wenn Sie jedoch Hinweise benötigen, dann müssen Sie es im Speicher beheben, wenn Sie mit ihnen arbeiten wollen.
Andere Tipps
Sie müssen es überall Sie Pointer-Arithmetik tun, um die Garbage Collector zu verhindern, dass es um dich zu bewegen.
Da Sie im unsicheren Modus (Zeiger) ausgeführt wird, weist die feste Anweisung einen bestimmten Speicherplatz auf diese Variable. Wenn Sie nicht die feste Anweisung gesetzt haben, die Garbage Collector die Variable überall im Speicher bewegen kann, wenn er will.
Hoffe diese Hilfe.
MSDN hat ein sehr ähnliches Beispiel. Die feste Anweisung grundsätzlich blockiert garbage collection. In .NET, wenn Sie einen Zeiger auf einen Speicherplatz verwenden kann die Laufzeit um das Objekt zu einer „besseren“ Lage jederzeit umverteilt. SO, wenn Sie Speicher zugreifen möchten direkt müssen Sie es an Ort und Stelle fixieren.