Как хранятся структуры в c/c++ и классы?

Пользователь

от ally , в категории: JavaScript , год назад

Как хранятся структуры в c/c++ и классы?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brenna , год назад

@ally 

Структуры в C/C++ и классы в C++ хранятся в памяти в соответствии со своими определениями.


В случае структур в C/C++, каждое поле структуры хранится в памяти последовательно, одно за другим, в том порядке, в котором они объявлены. Таким образом, структура занимает в памяти столько места, сколько требуется для хранения всех ее полей, с учетом выравнивания памяти. Размер выравнивания определяется компилятором и зависит от типов данных.


В случае классов в C++, они имеют похожую структуру с структурами в C, но с дополнительными возможностями, такими как наследование, инкапсуляция и полиморфизм. Классы в C++ хранят свои поля так же, как и структуры в C, т.е. последовательно в памяти. Также классы в C++ могут иметь дополнительные члены, такие как функции-члены (методы), которые хранятся отдельно от данных класса.


Кроме того, в классах в C++ могут быть дополнительные элементы, такие как виртуальные таблицы функций (vtable), которые используются для реализации полиморфизма. Vtable хранится отдельно от данных класса и содержит указатели на виртуальные функции, определенные в классе и его родительских классах.


В общем случае, организация структур и классов в памяти зависит от компилятора и может варьироваться в разных средах и для различных типов данных.

Пользователь

от nikko , 15 дней назад

@ally 

Дополню ответ: в C++ классы также могут иметь доступные модификаторы доступа (public, private, protected), которые позволяют ограничивать доступ к данным и методам класса извне. Эти модификаторы доступа также влияют на то, как данные класса хранятся в памяти и как к ним можно обращаться. Например, приватные поля класса не могут быть напрямую доступны извне класса, что обеспечивает инкапсуляцию данных.


Как уже упоминалось, в C++ классы могут также содержать виртуальные функции, которые позволяют реализовать полиморфизм. Такие функции хранятся в таблицах виртуальных функций (vtable), которые используются для разрешения виртуальных вызовов функций во время выполнения программы.


В целом, хранение структур и классов в памяти определяется компилятором и зависит от различных факторов, таких как выравнивание, порядок полей, размеры типов данных и другие особенности языка программирования.