/*
 * Lösung für Übung 9.6.1 - Wie viel Byte
 *
 * Für die Lösung mussten Sie keinen Code schreiben. Hier
 * folgt die ausgefüllte Tabelle, unten ist etwas Testcode dafür
 *
 *      Element               | Speicherbedarf      |       Erklärung
 * ================================================================================================
 *  int a = 17;               | 4 Byte              |
 * ------------------------------------------------------------------------------------------------
 *  size_t b = 17;            | 8 Byte              | size_t ist für größere Zahlen bestimmt
 * ------------------------------------------------------------------------------------------------
 *  std::string c = "Hola";   | 29 Byte (mindestens)| 24 Byte für den leeren String (8 für den
 *                            |                     | Zeiger, 8 für die Puffergröße, 8 für die Länge)
 *                            |                     | + 4 Zeichen + 1 End-Of-String Zeichen
 * ------------------------------------------------------------------------------------------------
 *  int* d = new int(17);     | 12 Byte             | 8 für den Zeiger, 4 für den int
 * ------------------------------------------------------------------------------------------------
 *  struct Test { int a; };   | 4 Byte              | 4 für den einzigen Member, das a
 * ------------------------------------------------------------------------------------------------
 *  bool e = false;           | 1 Bit / 1 Byte      | True oder False braucht nur ein einziges Bit,
 *                            |                     | Wenn Sie also "1 Bit" geantwortet haben, ist das
 *                            |                     | richtig. In der Realität wird aber meistens wegen
 *                            |                     | technischer Besonderheiten ein ganzes Byte reserviert
 */
#include <iostream>

struct Test
{
  int a;
};

int main()
{
  int a = 17;
  std::cout << "int a = 17;\t\t" << sizeof(a) << std::endl;

  size_t b = 17;
  std::cout << "size_t b = 17;\t\t" << sizeof(b) << std::endl;

  std::string c = "Hola";
  // Hinweis: sizeof(std::string) ist implementationsabhängig.
  // Für Fortgeschrittene gibt es hier eine ausgiebige Betrachtung: https://shaharmike.com/cpp/std-string/
  std::cout << "std::string c = \"Hola\";\t" << (24 + 4 + 1) << std::endl;

  int* d = new int(17);
  std::cout << "int* d = new int(17);\t" << sizeof(d) + sizeof(*d) << std::endl;
  delete d;

  std::cout << "struct Test { int a; };\t" << sizeof(Test) << std::endl;

  bool e = false;
  std::cout << "bool e = false;\t" << sizeof(e) << std::endl;

  return 0;
}
