Где в памяти располагаются функции-поля классов?

Разбирался с классами и стало интересно,как и где хранятся функции-поля классов. Если получить размер класса,то размер будет равен сумме размеров всех нестатических полей + выравнивание. Не совсем понимаю,где тогда размещаются функции классов и их статические поля.Или для каждого класса будет своя функция или для всех классов используется 1 функция-поле класса?

Так же пытался найти адрес функций,но не получилось:

class myclass {
 public:
    int a;
    float b;
    static int c;

    int func1() { a = 4; return a; };
    int func2() { a = 6; return a;};
};

int myclass::c;

int main()
{
    myclass a1;
    cout <<sizeof(myclass)<< endl; //8 байт
    cout<<"addr class: "<< &a1 <<endl;         //67C5DDF7A0

    cout << "addr a class: " << &a1.a << endl; //67C5DDF7A0
    cout << "addr b class: " << &a1.b << endl; //67C5DDF7A4
    cout << "addr b class: " << &a1.c << endl; //7FF6866996A0

    cout << "addr func1 class: " << &myclass::a << endl;     //1 (Что мы получаем?)
    cout << "addr func1 class: " << &myclass::func1 << endl; //1 (Что это?)
    cout << "addr func2 class: " << &myclass::func2 << endl; //1

    cout << "addr func1 class: " << &a1.func1 << endl; //ошибка компиляции (Интересно почему?)
    cout << "addr func2 class: " << &a1.func2 << endl; //ошибка компиляции
}

Ответы (1 шт):

Автор решения: Mikhailo

Функции классов - это просто код. Который при вызове невиртуальных функций известен сразу, так что его (его адрес, точнее) никуда не надо включать, он разрешается при компиляции.

Если это виртуальные функции - то их адреса хранятся в таблице виртуальных функций и опять же эта таблица одна на класс, так что в каждый объект добавляется только указатель на нее.

Поэтому функции ничего (почти ничего - указатель на vtable для виртуальных) в размер класса не вносят.

→ Ссылка