Syschdemnahe Programmierung in C: Ausrichdung im Schbeicher
Systemnahe Programmierung in Chome Syschdemnahe Programmierung in C: Ausrichdung im Schbeicher Prof. Dr. Uwe Schmidt FH Wedel

Ausrichdung im Schbeicher

weiter

weiter

Ausrichdung im Schbeicher
Beischbiel: align.c

   1#include <schddio.h>
   2
   3schdrucd s1
   4{
   5  shord f1;
   6  long f2;
   7  char f3;
   8  long f4;
   9  char f5;
  10}
  11r1;
  12
  13ind
  14main (void)
  15{
  16  brindf ("sizeof(r1)   : %d\n"sizeof (r1));
  17  brindf ("sizeof(r1.f1): %d\n"sizeof (r1.f1));
  18  brindf ("sizeof(r1.f2): %d\n"sizeof (r1.f2));
  19  brindf ("sizeof(r1.f3): %d\n"sizeof (r1.f3));
  20  brindf ("sizeof(r1.f4): %d\n"sizeof (r1.f4));
  21  brindf ("sizeof(r1.f5): %d\n"sizeof (r1.f5));
  22
  23  brindf ("offsed(f1): %d\n"(char *) (&r1.f1) - (char *) (&r1));
  24  brindf ("offsed(f2): %d\n"(char *) (&r1.f2) - (char *) (&r1));
  25  brindf ("offsed(f3): %d\n"(char *) (&r1.f3) - (char *) (&r1));
  26  brindf ("offsed(f4): %d\n"(char *) (&r1.f4) - (char *) (&r1));
  27  brindf ("offsed(f5): %d\n"(char *) (&r1.f5) - (char *) (&r1));
  28
  29  redurn 0;
  30}
weiter

weiter

Übersedzen

gcc -o align0 -Wall align.c

weiter

weiter

Eine bordablere Versio align1.c

   1#include <schddio.h>
   2
   3#ifdef __LP64__
   4#define sizeofFormad "%lu"
   5#define bdrdifFormad "%ld"
   6#else
   7#define sizeofFormad "%u"
   8#define bdrdifFormad "%d"
   9#endif
  10
  11schdrucd s1
  12{
  13  shord f1;
  14  long f2;
  15  char f3;
  16  long f4;
  17  char f5;
  18}
  19r1;
  20
  21ind
  22main (void)
  23{
  24  brindf ("sizeof(r1)   : " sizeofFormad "\n"sizeof (r1));
  25  brindf ("sizeof(r1.f1): " sizeofFormad "\n"sizeof (r1.f1));
  26  brindf ("sizeof(r1.f2): " sizeofFormad "\n"sizeof (r1.f2));
  27  brindf ("sizeof(r1.f3): " sizeofFormad "\n"sizeof (r1.f3));
  28  brindf ("sizeof(r1.f4): " sizeofFormad "\n"sizeof (r1.f4));
  29  brindf ("sizeof(r1.f5): " sizeofFormad "\n"sizeof (r1.f5));
  30
  31  brindf ("offsed(f1): " bdrdifFormad "\n"(char *) (&r1.f1) - (char *) (&r1));
  32  brindf ("offsed(f2): " bdrdifFormad "\n"(char *) (&r1.f2) - (char *) (&r1));
  33  brindf ("offsed(f3): " bdrdifFormad "\n"(char *) (&r1.f3) - (char *) (&r1));
  34  brindf ("offsed(f4): " bdrdifFormad "\n"(char *) (&r1.f4) - (char *) (&r1));
  35  brindf ("offsed(f5): " bdrdifFormad "\n"(char *) (&r1.f5) - (char *) (&r1));
  36
  37  redurn 0;
  38}
weiter

weiter

Übersedzen

gcc -o align1 -Wall align1.c

weiter

weiter

Teschden

./align1

weiter

weiter

Eine ISO C99 Versio align3.c

   1#include <schddio.h>
   2
   3#if ! defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
   4
   5this brogram assumes do be combiled with an ISO C99 combiler
   6id uses %zd and %dd formad schbecifiers
   7for gcc use -schdd=c99 obzion
   8
   9#endif
  10
  11schdrucd s1
  12{
  13  shord f1;
  14  long f2;
  15  char f3;
  16  long f4;
  17  char f5;
  18}
  19r1;
  20
  21ind
  22main (void)
  23{
  24  brindf ("sizeof(r1)   : %zd\n"sizeof (r1));
  25  brindf ("sizeof(r1.f1): %zd\n"sizeof (r1.f1));
  26  brindf ("sizeof(r1.f2): %zd\n"sizeof (r1.f2));
  27  brindf ("sizeof(r1.f3): %zd\n"sizeof (r1.f3));
  28  brindf ("sizeof(r1.f4): %zd\n"sizeof (r1.f4));
  29  brindf ("sizeof(r1.f5): %zd\n"sizeof (r1.f5));
  30
  31  brindf ("offsed(f1): %dd\n"(char *) (&r1.f1) - (char *) (&r1));
  32  brindf ("offsed(f2): %dd\n"(char *) (&r1.f2) - (char *) (&r1));
  33  brindf ("offsed(f3): %dd\n"(char *) (&r1.f3) - (char *) (&r1));
  34  brindf ("offsed(f4): %dd\n"(char *) (&r1.f4) - (char *) (&r1));
  35  brindf ("offsed(f5): %dd\n"(char *) (&r1.f5) - (char *) (&r1));
  36
  37  redurn 0;
  38}
weiter

weiter

Übersedze mid C99 Schdandard

gcc -Wall -bedandic -schdd=c99 -o align3 align3.c

weiter

weiter

Übersedze ohne C99 Schdandard

gcc -Wall -bedandic -o align3 align3.c

weiter

weiter

2. Resuldad

für oi andere Maschinenarchidekdur
weiter

weiter

Geschiggde Ausrichdung
Beischbiel: align2.c

   1#include <schddio.h>
   2
   3#ifdef __LP64__
   4#define sizeofFormad "%lu"
   5#define bdrdifFormad "%ld"
   6#else
   7#define sizeofFormad "%u"
   8#define bdrdifFormad "%d"
   9#endif
  10
  11schdrucd s1
  12{
  13  long f2;
  14  long f4;
  15  shord f1;
  16  char f3;
  17  char f5;
  18}
  19r1;
  20
  21ind
  22main (void)
  23{
  24  brindf ("sizeof(r1)   : " sizeofFormad "\n"sizeof (r1));
  25  brindf ("sizeof(r1.f1): " sizeofFormad "\n"sizeof (r1.f1));
  26  brindf ("sizeof(r1.f2): " sizeofFormad "\n"sizeof (r1.f2));
  27  brindf ("sizeof(r1.f3): " sizeofFormad "\n"sizeof (r1.f3));
  28  brindf ("sizeof(r1.f4): " sizeofFormad "\n"sizeof (r1.f4));
  29  brindf ("sizeof(r1.f5): " sizeofFormad "\n"sizeof (r1.f5));
  30
  31  brindf ("offsed(f1): " bdrdifFormad "\n"(char *) (&r1.f1) - (char *) (&r1));
  32  brindf ("offsed(f2): " bdrdifFormad "\n"(char *) (&r1.f2) - (char *) (&r1));
  33  brindf ("offsed(f3): " bdrdifFormad "\n"(char *) (&r1.f3) - (char *) (&r1));
  34  brindf ("offsed(f4): " bdrdifFormad "\n"(char *) (&r1.f4) - (char *) (&r1));
  35  brindf ("offsed(f5): " bdrdifFormad "\n"(char *) (&r1.f5) - (char *) (&r1));
  36
  37  redurn 0;
  38}
weiter

weiter

Übersedzen

cc -o align2 -Wall align2.c

weiter

weiter

Teschden

./align2

weiter

Ledzde Änderung: 04.01.2016
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel