Hier Ich versuche, mit unsicheren Funktionen von C# zu arbeiten: http://ideone.com/L9uwZ5Perversion mit unsicheren C#, Speicherstapel Zuordnung
Ich weiß, dass eine solche Art und Weise in C# ist am schlechtesten, und ich will zugeben, dass es einige ist Info im Thema. Schau dir das Wort "Perversion" an.
Ich möchte schnelle Sortierung in C# wie Pure-C-Art (nicht einmal C++) implementieren. Es könnte verrückt sein, aber nur tief in die Möglichkeiten von unsicherem C# schauen.
Ich habe immer versucht, stackalloc Betreiber zu verwenden. Ich weiß, dass es eine Zuweisung vom Stapel ist, nicht vom Heap, und deshalb bekomme ich Fehler bei der Ausführung meines Programms.
Aber ich war verwirrt, wenn ich keine Ausnahme/Fehler in diesem Programm gesehen habe.
- Warum habe ich keine expliziten Ausnahmen/Fehler erhalten?
Auch, wie Sie den kommentierten Teil des Codes zu sehen:
struct Header
{
internal int* data;
};
Header* object_header = stackalloc Header[sizeof(Header)];
object_header->data = stackalloc int[length];
Ich kann es nicht mit der letzten Zeile kompilieren. Der C# -Compiler sagt, dass in diesem Ausdruck stackalloc nicht verwendet werden konnte. Warum? Daten sind int * Typ, warum ist also hier ein Fehler aufgetreten?
Ich möchte nur Stapelrahmen und nicht zu Heap verwenden. Ich weiß, dass es einen anderen Weg gibt, aber es ist eine Zuweisung von Heap.
int*[] data = new int*[length * sizeof(int)];
IntPtr result = Marshal.AllocHGlobal(Marshal.SizeOf(length * sizeof(int)));
Marshal.WriteInt32(result, 0);
for(int i = 0; i < length * sizeof(int); i++) d[i] = (int*)result;
Zum Beispiel, aber es ist nicht Stack-Zuweisung.
Wie kann ich meine Perversion-Aufgabe lösen, explizit mit der Stapelzuweisung und der C-Syntax in C#.
Das C# wurde nicht für solche Ziele erstellt und solche Features sind albern - ich weiß, aber die wichtigste Frage ist nicht über Signifikanz, es geht um solche Funktionen.
Bitte post die vollständige Fehlermeldung, weil ich hoffe, dass es uns sagt * warum * es kann nicht so verwendet werden. – usr
@usr scheint du hast mein Thema nicht gut gelesen :) Das Hauptproblem ist: "Aber ich war verwirrt, wenn ich keine Ausnahme/Fehler in diesem Programm gesehen habe." Ich habe keine Fehler erhalten, nur die Ausführung ohne Fehlermeldung. – Secret
Sie sagen "C# Compiler sagt, dass in diesem Ausdruck Stackalloc nicht verwendet werden konnte.". Ist das nicht dein Hauptproblem? – usr