Pergunta

Eu estou querendo saber por que os dois tipos seguintes

struct {
    double re[2];
};

e

double re[2];

tem o mesmo tamanho em C? Não struct adicionar um pouco de tamanho em cima?

Foi útil?

Solução

Não, apenas se limita a compõe todos os elementos em um elemento de nível superior cujo tamanho é meramente tamanhos dos elementos individuais somados (mais algum estofamento dependendo regras de alinhamento, mas que está fora do âmbito desta questão).

Outras dicas

Não se ele pode ajudá-lo - não. C evita a sobrecarga como a peste. E, especificamente, evita sobrecarga neste contexto.

Se você usou uma estrutura diferente, que você pode ver a diferença:

struct space_filled
{
    char       part0;
    double     part1;
};

Se a sua máquina requer double ser alinhados em um limite de 8 bytes (e sizeof(double) == 8, o que é normal, mas não mandatados pelo standard), então você vai achar que a estrutura ocupa 16 bytes.

Não, a estrutura não tem que acrescentar nada. Ao contrário de Java ou, onde as classes (e estruturas) tem um grupo de outras responsabilidades, em C e C ++, eles são simplesmente os recipientes usados ??para conter um número de membros de dados. Em C ++, eles podem ter que armazenar uma vtable para resolver chamadas de função virtuais se existir, mas, em geral, não, uma estrutura em si tem nenhuma sobrecarga.

A única exceção é o seguinte:

typedef struct {} empty;
assert(sizeof(empty) > 0);

O tamanho de um struct vazio irá não ser zero. A estrutura tem que ter alguns tamanho diferente de zero uma vez que cada objeto tem que ter um endereço exclusivo. (Caso contrário, você não seria capaz de criar uma matriz dessas estruturas)

No. não struct Não adicione qualquer tamanho, ou tem alguma sobrecarga no C compilado.

É uma camada de sintaxe que requer trabalho adicional por parte do compilador, mas não tem nenhuma sobrecarga no tempo de execução.

C é uma linguagem extremamente "naked", o que significa que nada existe a não ser necessário. Então, pergunte a si mesmo: "O que a sobrecarga faz um struct exige?", E você não vai encontrar nenhum.

Sem isso não acontecer.

Esse é um dos pontos positivos de estruturas (por que eles estavam tão útil na velha escola de programação TCP / IP).

É uma boa maneira de representar a memória / tampão layout.

não o tipo struct em C apenas sequencialmente disposição dos membros na memória

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top