Freigeben über


C6262

Warnung C6262: Funktion verwendet <constant> Bytes des Stapels: überschreitet /analyze:stacksize<constant 2>.Verschieben Sie einige Daten auf den Heap.

Diese Warnung gibt an, dass Stapelverwendung, die einen voreingestellten Schwellenwert (constant 2) überschreitet in einer Funktion erkannt wurde.Die standardmäßige Stapelrahmengröße für diese Warnung ist 16 KB für Benutzermodus, 1 KB für Kernelmodus.Stapel-gleichmäßig im Benutzer Modus-wird und kann, eine Seite von Stapelursachen einen Commit für eine Stapelüberlaufausnahme beschränkt.Kernelmodus hat eine Stapelgröße des KBITS 12, die nicht erhöht werden kann; Daher darf Kernelmoduscode Stapelverwendung aggressiv einschränken.

Um das Problem nach dieser Warnung zu korrigieren, können Sie Daten auf den Heap oder auf anderen dynamischen Arbeitsspeicher verschieben.im Benutzermodus ist ein großer Stapelrahmen kein Problem- und diese Warnung ist möglicherweise unterdrücken-aber Größenänderung eines große Stapelrahmens das Risiko eines Stapelüberlaufs.(Großer Stapelrahmen möglicherweise A tritt auf, wenn die Funktion den Stapel stark verwendet oder rekursiv ist). Die gesamte Stapelgröße im Benutzermodus kann, wenn Stapelüberlauf auftritt, tatsächlich, jedoch nur bis zur Systemgrenze erhöht werden.Sie können die /analyze Befehlszeilenoption verwenden, den Wert für <constant 2> zu ändern, aber es sich stellt ein Risiko vor, dass ein Fehler nicht gemeldet wird.

Für Kernelmodus Code-für Beispiel, in Projekte-d Treiber Wert von <constant 2> ist auf 1 KB festgelegt.Gut geschriebene Treiber sollten sehr wenige Funktionen verfügen, die diesem Wert annähern, und das Ändern der Begrenzung nach unten ist möglicherweise wünschenswert.Die gleichen allgemeinen Verfahren, die verwendet werden, damit die Benutzermoduscode Stapelgröße reduziert, können Kernelmoduscode angepasst werden.

Beispiel

Der folgende Code generiert diese Warnung, weil char buffer 16.382 Bytes verknüpft, und die lokale ganzzahlige i ordnet weitere 4 Bytes zu, wodurch die standardmäßige Stapelgröße von 16 KB überschreiten.

#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.

#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);
  }
}

Um diese Warnung durch Anpassen der Stapelgröße beheben

  1. Klicken Sie auf der Menüleiste wählen Sie Projekt, Eigenschaften aus.

    Das Dialogfeld Eigenschaftenseiten wird angezeigt.

  2. Erweitern Sie Konfigurationseigenschaften.

  3. Erweitern Sie C/C++.

  4. Ausgewählte Befehlszeile-Eigenschaften.

  5. In Zusätzliche Optionen fügen Sie /analyze:stacksize16388 hinzu.

Siehe auch

Aufgaben

Gewusst wie: Verwenden von systemeigenen Laufzeitprüfungen

Referenz

/STACK (Stapelreservierungen)

_resetstkoflw