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
Em a barra de menu, escolha Projeto, Propriedades.
a caixa de diálogo de Páginas de Propriedade é exibida.
Expanda Propriedades de Configuração.
Expanda C/C++.
Propriedades específicas de Linha de comando .
Em Opções adicionais, adicione /analyze:stacksize16388.
Consulte também
Tarefas
Como: usar verificações de tempo de execução nativas