C++ 为什么这个类的sizeof()返回4和2个字节

C++ 为什么这个类的sizeof()返回4和2个字节,c++,arduino-esp8266,C++,Arduino Esp8266,当我打印下面定义的类的sizeof(SenseNode)时,返回4。我原以为是2个,因为2个uint8_t私人成员。 我用另外两个字节做什么 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,

当我打印下面定义的类的sizeof(SenseNode)时,返回4。我原以为是2个,因为2个uint8_t私人成员。 我用另外两个字节做什么

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;
};

首先,
SenseNode
类是多态的,因为您有一个虚拟函数。编译器将指针添加到vtable,因此类的大小取决于平台。在你的例子中,指针的大小是2,我们有2+1+1=4。您可以阅读有关此主题的内容。

请记住,虚拟指针可能重复!!!顺便说一句,很难想象通过某个协议传输整个虚拟对象我希望它至少是8。你的平台上的
sizeof(void*)
是什么?@HolyBlackCat他在arduino so 2上