Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
nikeo
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 20
#1

Представление класса в памяти - C++

17.02.2013, 14:32. Просмотров 2146. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток!

Подскажите ка,как класс представляется в памяти?и как представляется структура?

Простите за столь банальные вопросы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 14:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Представление класса в памяти (C++):

Представление памяти, указатели - C++
Доброго времени суток, форумчане. Практика языка и программирования уже есть, но всё на начальном уровне. Сейчас вплотную столкнулся с...

Представление чисел в памяти! - C++
нужна сделать реализацию числа в памяти получилось для одного числа, а как сделать для нескольких, т.е передаю {1,1,0,0} выдаст {0,0,1,1},...

Представление в памяти массивов и матриц - C++
Здравствуйте всем!!!Помогите пожалуйста, нужно написать код программы на следующую задачу: Цель работы – получение практических...

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

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

Представление в памяти массивов и матриц - C++
Помогите решить эту задачу в С++ Для разряженной матрицы целых чисел в соответствии с индивидуальным заданием создать модуль доступа к...

7
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.02.2013, 14:36 #2
Цитата Сообщение от nikeo Посмотреть сообщение
Подскажите ка,как класс представляется в памяти?
Имел ввиду объект класса? Потому что класса в памяти нет.
Просто данные-члены (и базовых классов тоже). Плюс указатель(и) на таблицу виртуальных функций. Структура - то же.
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
17.02.2013, 15:05 #3
В самом простом случае члены класса просто расположены в памяти друг за другом, с учётом выравнивания: при необходимости после очередного члена добавляется пустое место, чтобы адреса всех членов были кратны нужному числу (обычно 4), это делается для ускорения доступа к памяти. Выравниванием можно управлять при помощи директив компилятора (например, при работе с файлами или передаче данных по сети это бывает нужно). В классах с виртуальными функциями первым по порядку располагается указатель на таблицу виртуальных функций ("невидимый" для программиста). В более сложных случаях (например, множественное виртуальное наследование) в разных местах класса могут располагаться дополнительные служебные поля.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.02.2013, 15:06 #4
Цитата Сообщение от Nick Alte Посмотреть сообщение
В классах с виртуальными функциями перед членами вписывается указатель на таблицу виртуальных функций.
Это не оговаривается стандартом. Указатель может быть, как перед членами, так и после них. А может быть, в общем-то, где угодно. Это на усмотрение компилятора.
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
17.02.2013, 15:11 #5
В теории так, но знаем ли мы хоть один компилятор, который поступает иначе? Если располагать указатель не в начале объекта, то потом может оказаться трудно его разыскивать в потомках, добавляющих и свои собственные данные. В то время как при таком подходе объект очень легко "обрезать" до своего предка.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.02.2013, 15:14 #6
Цитата Сообщение от Nick Alte Посмотреть сообщение
В теории так, но знаем ли мы хоть один компилятор, который поступает иначе?
Это не имеет значения. Теоретически указатель может располагаться где угодно.
Цитата Сообщение от Nick Alte Посмотреть сообщение
Если располагать указатель не в начале объекта, то потом может оказаться трудно его разыскивать в потомках
Компилятор знает размер, занимаемый в памяти членами класса. Поэтому трудно не будет.
Цитата Сообщение от Nick Alte Посмотреть сообщение
В то время как при таком подходе объект очень легко "обрезать" до своего предка.
Легко, не легко, но говорить, что указатель располагается перед членами неправильно. Тема в разделе языка С++, а не конкретного компилятора. С теми, с которыми имел дело - да, перед членами. Но кто знает, сколько разных экзотических компиляторов и опций к ним еще существует. Он может располагаться где угодно в области памяти для членов. Главное, чтобы автор учел сам факт его наличия
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
17.02.2013, 15:42 #7
В таком случае некорректно вообще говорить об указателе и таблицах виртуальных методов, потому что компилятор вправе реализовывать динамический полиморфизм как ему угодно. Так что в экзотическом компиляторе с причудливыми опциями вполне может вообще не оказаться ни тех указателей, ни тех таблиц...
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
17.02.2013, 15:43 #8
Цитата Сообщение от Nick Alte Посмотреть сообщение
В таком случае некорректно вообще говорить об указателе и таблицах виртуальных методов, потому что компилятор вправе реализовывать динамический полиморфизм как ему угодно.
Да, теоретически вообще некорректно об этом говорить. Компилятор реализует, как угодно. Я лишь поправил предложение для случая, когда указатель в данных. А так, его там вообще может не быть. И такой ответ - самый правильный.
Цитата Сообщение от Nick Alte Посмотреть сообщение
Так что в экзотическом компиляторе с причудливыми опциями вполне может вообще не оказаться ни тех указателей, ни тех таблиц...
Все верно.
0
17.02.2013, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 15:43
Привет! Вот еще темы с ответами:

Внутреннее представление числа в памяти - C++
нужно сделать реализацию числа в памятиfloat d1 = 72.9e-8;... а как??? это нужно число перевести в двоичную систему, или как???

Представление и структура указателя в памяти - C++
Указатель занимает 4 байта памяти. Если судить по определению "указатель - это переменная, которая хранит адрес", то все эти 4 байта должны...

Представление в памяти массивов и матриц - C++
Для разряженной матрицы целых чисел создать модуль доступа к ней: -все нулевые элементы размещены на главной диагонали и в верхней...

Представление памяти std::vector - C++
Добрый день! Вопрос по вектору, из его описание следует, что он располагает свои элементы линейно до тех пор пока это возможно, а в случае...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.