Почему sizeof () возвращает 4 для этого класса с 2 байтами - PullRequest
0 голосов
/ 23 июня 2018

Когда я печатаю sizeof (SenseNode) класса, определенного ниже, возвращается 4.Я ожидал, что это будет 2 из-за 2 частных членов uint8_t.Что я использую другие 2 байта?

enum NodeType { unknown = 255, temperature=0, button=1, text=2, page=3, dualstate=4, slider=5, alarmHandler=6, clock=7, gps=8,
                         yawpitchroll = 9, gsm = 10, alert = 11 };

class SenseNode {
  public:
    SenseNode(uint8_t id) : SenseNode(id, NodeType::unknown) {};
    SenseNode(uint8_t id, NodeType type) : id(id), nodeType(type) {};
    virtual ~SenseNode() = default;

    // Dispatcher of notifyObserver
    virtual void notifyObserver2(SenseObserver* observer);

    /* Accessor for property Id */
    uint8_t getId() { return id; }
    NodeType getNodeType() { return nodeType; }
  private:
    uint8_t id = 0;
    uint8_t nodeType = NodeType::unknown;
};

1 Ответ

0 голосов
/ 24 июня 2018

Прежде всего, класс SenseNode является полиморфным, потому что у вас есть виртуальная функция. Компилятор добавляет указатель на vtable, и в результате размер класса зависит от платформы. В вашем случае размер указателя равен 2, а у нас 2 + 1 + 1 = 4. Вы можете прочитать об этой теме здесь и здесь .

...