Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung C6262: Die Funktion verwendet <Konstante> Bytes vom Stapel und überschreitet /analyze:stacksize<Konstante 2>.Verschieben Sie einige Daten auf den Heap.
Diese Warnung gibt an, dass in einer Funktion erkannt worden ist, dass die Stapelverwendung einen voreingestellten Schwellenwert (constant 2) überschritten hat.Die Standardstapelrahmengröße für diese Warnung ist 16 KB für Benutzermodus, 1 KB für Kernelmodus.Für den Stapel gilt sogar im Benutzermodus eine Beschränkung, ein Fehler beim Übertragen einer Stapelseite führt zu einer Stapelüberlaufausnahme.Im Kernelmodus gibt es eine Stapelgrößengrenze von 12 KB, die nicht erhöht werden kann, daher sollte Kernelmoduscode die Stapelverwendung weitestgehend vermeiden.
Um das Problem zu korrigieren, können Sie einige Daten auf den Heap oder auf anderen dynamischen Arbeitsspeicher verschieben. Im Benutzermodus ist ein großer Stapelrahmen wahrscheinlich kein Problem (die Warnung kann sogar unterdrückt werden), aber ein großer Stapelrahmen birgt das Risiko eines Stapelüberlaufs. (Ein großer Stapelrahmen kann möglicherweise auftreten, wenn die Funktion den Stapel stark auslastet oder rekursiv arbeitet.) Im Benutzermodus kann die gesamte Stapelgröße beim tatsächlichen Auftreten eines Stapelüberlaufs erhöht werden, jedoch nur bis zur Systembegrenzung. Sie können die Befehlszeilenoption /analyze zum Ändern des Werts von <constant 2> verwenden, eine Erhöhung birgt jedoch das Risiko, dass ein Fehler nicht gemeldet wird.
Für Kernelmoduscode, beispielsweise von Treiberprojekten, ist der Wert von <constant 2> auf 1 KB festgelegt.Gut geschriebene Treiber sollten sehr wenige Funktionen haben, die sich diesem Wert nähern, und das Ändern der Grenze nach unten ist möglicherweise wünschenswert. Die gleichen allgemeinen Techniken, die in Benutzermoduscode zum Reduzieren der Stapelgröße verwendet werden, können für den Kernelmoduscode angepasst werden.
Beispiel
Der folgende Code generiert diese Warnung, weil char buffer 16.382 Bytes und die lokale ganzzahlige Variable i weitere 4 Bytes belegen und so gemeinsam die standardmäßige Stapelgröße von 16 KB überschreiten.
// cl.exe /c /analyze /EHsc /W4
#include <windows.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char buffer[MAX_SIZE];
i = 0;
buffer[0]='\0';
// code...
}
Im folgenden Code wird diese Warnung korrigiert, indem einige Daten auf den Heap verschoben werden.
// cl.exe /c /analyze /EHsc /W4
#include <stdlib.h>
#include <malloc.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char *buffer;
i = 0;
buffer = (char *) malloc( MAX_SIZE );
if (buffer != NULL)
{
buffer[0] = '\0';
// code...
free(buffer);
}
}
Die Verwendung von "malloc" und "free" kann viele Fehler im Sinne von Speicherverlusten und Ausnahmen verursachen.Um diese Arten von Speicherverlusten und Ausnahmen vollständig zu vermeiden, verwenden Sie die Mechanismen, die von der C++-Standardvorlagenbibliothek (STL) bereitgestellt werden.Dazu gehören shared_ptr, unique_ptr und vector.Weitere Informationen finden Sie unter Intelligente Zeiger (Modern C++) und C++-Standardbibliotheksreferenz.
Anpassen der Stapelgröße zum Aufheben der Warnung
Wählen Sie in der Menüleiste Projekt und Eigenschaften aus.
Das Dialogfeld Eigenschaftenseiten wird angezeigt.
Erweitern Sie Konfigurationseigenschaften.
Erweitern Sie C/C++.
Wählen Sie Befehlszeile-Eigenschaften aus.
Fügen Sie /analyze:stacksize16388 in Zusätzliche Optionen hinzu.
Siehe auch
Aufgaben
Gewusst wie: Verwenden von systemeigenen Laufzeitprüfungen