Linuxtrent: Re: Compilare con Linux...

  • From: Marco Pistore <pistore@xxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxxxxxx
  • Date: Sat, 21 Oct 2000 13:16:14 -0400

On Fri, Oct 20, 2000 at 08:38:31PM -0400, Mario Torre wrote:
> Ho avuto modo di valutare un test riguardo il padding, e sembra che il gcc
> perda decisamete, con uno scarto di 3 byte su una struttura semplice:
> 
> struct x {
>          int a;
>          char b;
> };
> 
>  sizeof(struct x) = 8

Ciao,

il problema e' che su architetture a 32 bit e' _molto_ piu' efficiente
in termini di tempo accedere a dati che sono allineato rispetto a
dwords (ovvero, che occupano indirizzi di memoria multipli di 4).  Per
questo nella struttura sopra vengono riservati 4 bytes per un misero
char...

Se hai problemi di spazio, puoi sempre dichiarare che la struttura deve essere 
"impachettati":

  struct x {
           int a;
           char b;
  } __attribute__ ((packed));

  sizeof(struct x) = 5

In gcc ci sono un sacco di attributi e di opzioni da linea di comandi
che ti permettono di fare regolazione fine del codice che vuoi
produrre...

Puoi fare riferimento, ad es., a
  http://gcc.gnu.org/onlinedocs/gcc_4.html#SEC97
per i dettagli sull'attributo "packed".

> E' giusto e non si tratta di un errore, e non ho test in mano sulle
> prestazioni effettive, ma basandosi solo sugli allineamenti, BC++ vince
> nettamente (immaginate strutture complesse e variegate, magari in un
> programma di gestione...)

Mah, il compromesso fra tempo di calcolo e memoria occupata e' una
cosa molto delicata!  Molto meglio lasciare la decisione al
programmatore, piuttosto che al compilatore.

(Comunque, sarei veramente interessato in un confronto serio fra gcc
e altri compilatori....)

Ciao,
Marco

-- 
Per disicriversi basta spedire un  messaggio con SOGGETTO
"unsubscribe" a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx
Gestione via web: http://freelists.dhs.org

Other related posts: