Compartilhar via


Agregados e uniões

Outros tipos, como arrays, structs e uniões têm mais rígidas exigências de alinhamento consistente agregada e união armazenamento recuperação de dados e de garantir. Aqui estão as definições de matriz, a estrutura e a união:

  • Matriz
    Contém um grupo ordenado de objetos de dados adjacentes. Cada objeto é chamado de um elemento. Todos os elementos dentro de uma matriz tem o mesmo tamanho e tipo de dados.

  • Structure
    Contém um grupo ordenado de objetos de dados. Ao contrário dos elementos de uma matriz, os objetos dentro de uma estrutura de dados podem ter tamanhos e tipos de dados diferentes. Cada objeto em uma estrutura de dados é chamado de um membro.

  • Union
    Um objeto que contém qualquer um de um conjunto de membros nomeados. Os membros do conjunto nomeado podem ser de qualquer tipo. O armazenamento alocado para uma união é igual para o armazenamento necessário para maior membro dessa união, além de qualquer preenchimento necessários para o alinhamento.

A tabela a seguir mostra o alinhamento altamente sugerido para os membros de escalares de uniões e estruturas.

Tipo escalar

Tipo de dados c

Alinhamento necessário

INT8

char

Byte

UINT8

unsigned char

Byte

INT16

short

Word

UINT16

unsigned short

Word

INT32

int, long

Doubleword

UINT32

int não assinado, unsigned long

Doubleword

INT64

__int64

Quadword

UINT64

unsigned __int64

Quadword

FP32 (único precision)

float

Doubleword

FP64 (duplas precision)

double

Quadword

PONTEIRO

*

Quadword

__m64

__m64 de struct

Quadword

__m128

__m128 de struct

Octaword

As regras de alinhamento agregadas a seguir se aplicam:

  • O alinhamento de uma matriz é o mesmo que o alinhamento de um dos elementos da matriz.

  • O alinhamento do início de uma estrutura ou uma união é o alinhamento máximo de qualquer membro individual. Cada membro dentro da estrutura ou união deve ser colocado em seu alinhamento adequado, conforme definido na tabela anterior, que pode exigir o enchimento interno implícito, dependendo do membro anterior.

  • Tamanho da estrutura deve ser um múltiplo inteiro do seu alinhamento, o que pode exigir o enchimento após o último membro. Desde que as estruturas e uniões podem ser agrupados em arrays, cada elemento da matriz de uma estrutura ou união deve começar e terminar ao alinhamento adequado, previamente determinado.

  • É possível alinhar os dados de maneira a ser maior do que os requisitos de alinhamento, contanto que as regras anteriores são mantidas.

  • Um compilador individual pode ajustar a remessa de uma estrutura por motivos de tamanho. Por exemplo /ZP (alinhamento de membro Struct) permite ajustar a remessa de estruturas.

Consulte também

Referência

Tipos e armazenamento