Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
'símbolo': o alinhamento de um membro era sensível à embalagem
Observações
O compilador adicionou preenchimento para alinhar um membro da estrutura no limite de embalagem, mas o valor de empacotamento é menor do que o tamanho do membro.
Example
Por exemplo, o seguinte trecho de código produz 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 uma das seguintes alterações:
Altere o tamanho da embalagem para o tamanho do membro que causou o aviso ou maior. Por exemplo, neste trecho, altere
pack(2)parapack(4)oupack(8).Reordene as declarações dos membros por tamanho, do maior para o menor. No trecho, inverta a ordem dos membros da estrutura de modo que o
long longmembro precede oint, e ointprecede ochar.
Esse aviso só acontece quando o compilador adiciona preenchimento antes dos membros de dados. Isso não acontece quando o empacotamento colocou dados em um local de memória que não está alinhado para o tipo de dados, mas nenhum preenchimento foi colocado antes do membro de dados. Quando os dados não estão alinhados em limites que são múltiplos do tamanho dos dados, o desempenho pode se degradar. Leituras e gravações de dados não alinhados causam falhas no processador em algumas arquiteturas e as falhas podem levar duas ou três ordens de magnitude a mais para serem resolvidas. Os acessos a dados não alinhados não podem ser portados para algumas arquiteturas RISC.
Você pode usar #pragma pacote ou /Zp para especificar o alinhamento da estrutura. (O compilador não gera esse aviso quando /Zp1 é especificado.)