Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Mar 1999 20:34:37 -0500
From:      "Mark S. Reichman" <mark@borg.com>
Cc:        Mark Turpin <mturpin@saturn.spel.com>, Freebsd-questions <freebsd-questions@FreeBSD.ORG>
Subject:   Re: Programming Question
Message-ID:  <36EC63AD.C2159EED@borg.com>
References:  <Pine.BSF.4.05.9903141646550.6443-100000@saturn.spel.com> <36EC34C0.13D218B4@bulinfo.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Check the memory begin addresses of the char and the short 
struct elements.  They are separated by two bytes even
though the char is a single byte in length.  Sinc struct
js is 4 bytes in length the ending address would be
4022328340 + 4 = 4022328344.


mark@slugo:~:>cc prog.c -o prog
mark@slugo:~:>./prog
short  2
int    4
long   4
char   1
float  4
double 8
js     4
Memory address begin for js            4022328340
Memory address begin for js.junk_char  4022328340
Memory address begin for js.junk_short 4022328342   




---- prog.c starts here -------------------------

struct junk_struct
{
   char junk_char;
  short junk_short;
};

main()
{
  struct junk_struct js;

  printf("short  %lu\n", (unsigned long) sizeof(short));
  printf("int    %lu\n", (unsigned long) sizeof(int));
  printf("long   %lu\n", (unsigned long) sizeof(long));
  printf("char   %lu\n", (unsigned long) sizeof(char));
  printf("float  %lu\n", (unsigned long) sizeof(float));
  printf("double %lu\n", (unsigned long) sizeof(double));

  printf("js     %lu\n", (unsigned long) sizeof(js));

  printf("Memory address begin for js            %lu\n", (unsigned long) &js);
  printf("Memory address begin for js.junk_char  %lu\n", (unsigned long) &js.junk_char);
  printf("Memory address begin for js.junk_short %lu\n", (unsigned long) &js.junk_short);
  return 0;
}



---------- cut here -----------
Iani Brankov wrote:
> 
> Mark Turpin wrote:
> >
> > I feel really silly having to ask this.
> >
> > Why does my sizeof(mystruct) come out as 4 instead of 3 ( short + char ) ?
> >
> >         struct {
> >            short        shortvariable;
> >            char         charvariable;
> >         } mystruct;
> >
> >         sizeof(mystruct) == 4
> 
> Try finding the addresses of the structure members. As I know the compiler
> aligns every variable at even address. Maybe that's the reason.
> 
> --iani
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-questions" in the body of the message

-- 
                    \|/
                   (@ @)
  +----------oOO----(_)------------------+
  |   Mark S. Reichman        FreeBSD    |
  |    mark@borg.com        Got source?  |
  +------------------------oOO-----------+
                  |__|__|
                   || ||
                  ooO Ooo


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?36EC63AD.C2159EED>