Compartilhar via


C6262

C6262 de aviso: A função usa bytes de <constant> de pilha: excede /analyze: stacksize<constant 2>.Considere mover alguns dados para o heap

Este aviso indica que o uso de pilha que excede o limiteconstant 2predefinido () foi detectado em uma função.O tamanho padrão de quadro de pilha para esse aviso é 16 KB para o modo de usuário, 1 KB para o o kernel.Pilha uniformes no usuário modo- está limitados, e a falha para confirmar uma página de pilha causa de uma exceção de estouro de pilha.O o kernel tem um limite de tamanho da pilha de 12 KB, que não pode ser gerado; portanto, o código de kernel- modo agressivelmente deve limitar o uso de pilha.

Para corrigir o problema code-behind de este aviso, você pode mover alguns dados para o heap ou outra memória dinâmico.Em o modo de usuário, um grande quadro de pilha não pode ser a problema- e esse erro pode ser suprimir- mas gera grandes de um quadro de pilha o risco de um estouro de pilha.(Quadro de pilha do grande pode ocorrer se a função usa a pilha intensamente ou é recursivo.) O tamanho total da pilha no modo de usuário pode ser gerado se o estouro de pilha ocorre na verdade, mas somente até o limite do sistema.Você pode usar a opção de linha de comando de /analyze altere o valor para <constant 2>, mas aumentá-lo apresenta um risco que um erro não será relatado.

Para o modo kernel- código para o exemplo, o valor de - projetos de driver de <constant 2> é definido como 1 KB.Drivers bem gravados devem ter muito poucas funções que aproximam esse valor, e o limite inferior para pode ser desejável.As mesmas técnicas básicas que são usadas para que o código do modo de usuário reduz o tamanho da pilha podem ser adaptadas para o código de kernel- modo.

Exemplo

O seguinte código gera este aviso como char buffer atribui 16.382 bytes, e o variável integer local i atribui outro 4 bytes, juntamente que excedem o limite de tamanho padrão a pilha de 16 KB.

#include <windows.h>
#define MAX_SIZE 16382

void f( )
{
  int i;
  char buffer[MAX_SIZE];
  
  i = 0;
  buffer[0]='\0';

  // code...
}

O código a seguir corrigir este aviso movendo alguns dados para o heap.

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

Para corrigir este aviso ajuste o tamanho de pilha

  1. Em a barra de menu, escolha Projeto, Propriedades.

    a caixa de diálogo de Páginas de Propriedade é exibida.

  2. Expanda Propriedades de Configuração.

  3. Expanda C/C++.

  4. Propriedades específicas de Linha de comando .

  5. Em Opções adicionais, adicione /analyze:stacksize16388.

Consulte também

Tarefas

Como: usar verificações de tempo de execução nativas

Referência

/ PILHA (alocações de pilha)

resetstkoflw