Il contributo di Struct alla dimensione del tipo
Domanda
Mi chiedo perché i seguenti due tipi
struct {
double re[2];
};
e
double re[2];
hanno le stesse dimensioni in C? Struct non aggiunge un po 'di overhead di dimensione?
Soluzione
No, semplicemente compone tutti gli elementi in un elemento di livello superiore la cui dimensione è semplicemente la dimensione dei singoli elementi sommati (più un po 'di riempimento a seconda delle regole di allineamento, ma non rientra nell'ambito di questa domanda).
Altri suggerimenti
Non se può aiutarlo - no. C evita le spese generali come la peste. E in particolare, evita le spese generali in questo contesto.
Se hai utilizzato una struttura diversa, potresti notare una differenza:
struct space_filled
{
char part0;
double part1;
};
Se la tua macchina richiede che double
sia allineato su un limite di 8 byte (e sizeof (double) == 8
, che è normale ma non obbligatorio dalla norma ), scoprirai che la struttura occupa 16 byte.
No, la struttura non deve aggiungere nulla. A differenza di Java o .NET, dove le classi (e le strutture) hanno un sacco di altre responsabilità, in C e C ++, sono semplicemente contenitori usati per contenere un numero di membri di dati. In C ++, potrebbe essere necessario archiviare una vtable per risolvere le chiamate di funzione virtuale, se presenti, ma in generale no, una struttura in sé non ha costi generali.
L'unica eccezione è questa:
typedef struct {} empty;
assert(sizeof(empty) > 0);
La dimensione di una struttura vuota non sarà zero. Una struttura deve avere alcune dimensioni diverse da zero poiché ogni oggetto deve avere un indirizzo univoco. (Altrimenti non saresti in grado di creare una matrice di queste strutture)
No. Struct non aggiunge alcuna dimensione né presenta alcun sovraccarico nel C. compilato
È un livello di sintassi che richiede ulteriore lavoro da parte del compilatore, ma non ha costi generali in fase di esecuzione.
C è estremamente "nudo" lingua, nel senso che non c'è nulla se non richiesto. Quindi chiediti, " quale spese generali richiede una struttura? & Quot ;, e non ne troverai nessuna.
No, no.
Questo è uno dei punti positivi delle strutture (perché sono stati così utili nella programmazione TCP / IP della vecchia scuola).
È un buon modo per rappresentare il layout di memoria / buffer.
no il tipo di struttura in C ha solo un layout sequenziale dei membri in memoria
a volte, vedi: http://en.wikipedia.org/wiki/Sizeof