Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
'símbolo': alinhamento de um membro foi sensível a empacotamento
Observações
O compilador adicionou preenchimento para alinhar um membro da estrutura do limite de empacotamento, mas o valor de empacotamento é menor que o tamanho do membro.
Example
Por exemplo, o seguinte snippet de código gera C4121:
// C4121.cpp
// compile with: /W4 /c
#pragma pack(2)
struct s
{
char a;
int b; // C4121
long long c;
};
Para corrigir esse problema, faça um das seguintes alterações:
Alterar o tamanho de empacotamento do membro que causou o aviso ou maior. Por exemplo, neste snippet, altere
pack(2)parapack(4)oupack(8).Reorganize as declarações de membro por tamanho, do maior para o menor. No snippet, inverta a ordem dos membros da estrutura de modo que o membro
long longprecedainteintprecedachar.
Esse aviso ocorre apenas quando o compilador adiciona preenchimento antes dos membros de dados. Não ocorre quando o empacotamento colocou dados em um local de memória que não está alinhado com o tipo de dados, mas nenhum preenchimento foi colocado antes do membro de dados. Quando os dados não são alinhados em limites que sejam múltiplos do tamanho dos dados, o desempenho pode ser prejudicado. As leituras e gravações de dados não alinhados causam falhas de processador em algumas arquiteturas e as falhas podem demorar mais tempo para resolver, de duas ou três ordens de magnitude. Os acessos a dados não alinhados não podem ser movidos para algumas arquiteturas RISC.
Você pode usar #pragma pack ou /Zp para especificar o alinhamento da estrutura. (O compilador não gera esse aviso quando /Zp1 é especificado.)