![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Здравствуйте,
В каких случаях в заголовке структур и классов перед данными располагаются специальные поля типа указателя на таблицу виртуальных функций? Интересует вообще всё, что может находиться между адресом экземпляра и адресом верхнего поля. Если случаев немного, то перечислите, пожалуйста, кратко и / если нет подскажите, где почитать. Кстати, стандарт на этот счёт что-то определяет?.. Спасибо. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Думаю, что если это и есть, то компиляторозависимо.
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
стандарт говорит, что это не определено
и размер класса и расположение данных внутри него - на совести компилятора |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
если под рукой, можно цитату?.. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| UnrealMan |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Правильно сделал, что спросил: тебе нагло наврали (тут такое нередко бывает
Это сообщение отредактировал(а) UnrealMan - 18.8.2008, 15:57 |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
И где наврали?
|
|||
|
||||
| SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Такую фигню накатал.
Выдало:
Т.е. 112 байт затерялось где-то между классами при выделении памяти через new, а в стеке все идет по-порядку. Компилятор gcc, спец. заголовков перед данными не видать. Т.е. пока адрес класса равен адресу первого члена данных. |
||||
|
|||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
UnrealMan, спасибо,
- что означает термин intervening access-specifier? Обычные спецификаторы доступа - private-public-protected, да? Если перевести на доступный язык, то получается, что в рамках секции с некоторым доступом все поля-значения размещаются ровно в том порядке, в каком они перечисленны в классе. Очень мило, что поля-указатели не оговариваются Второй тезис вообще пока не могу воткнуть SABROG, спасибо, Будет гораздо интереснее, если Вы продолжите анализ, введя виртуальные функции и/или множественное наследование. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| UnrealMan |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Да.
Если между двумя нестатическими членами-данными не находится access-specifier, то больший адрес имеет тот, что объявлен позже. При этом между членами могут быть пустоты. Касаемо POD-структур гарантируется, что объект такой структуры и его первый нестатический член-данное могут быть преобразованы друг в друга посредством reinterpret_cast:
Это сообщение отредактировал(а) UnrealMan - 18.8.2008, 16:49 |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а теперь покажи, где я наврал я ответил, на вопрос ответ - не определено |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Ну да. Именно это я и наблюдаю чаще всего. Alek86, из цитаты следует, что порядок следования членов определён в некоторой степени. Вы сказали, что это на совести компилятора. Но это не то, что я спрашивал : иногда случаются пустоты перед первым членом - хорошо, если стандарт этого не оговаривает (а он именно не оговаривает : написано, что не определено и не оговаривается - не одно и то же), то можно ли говорить хотя бы о каких-то закономерностях?
- круто! А для reinterpret_cast нужен rtti? Это сообщение отредактировал(а) marcusmae - 18.8.2008, 17:05 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Для POD-структуры гарантируется, что перед первым нестатическим членом-данным не может быть никаких неименованных пустот (см. примечание во второй приведённой мной цитате из п. 9.2 стандарта), а также что адрес её первого нестатического члена-данного совпадает с адресом её экземпляра (следствие из двух приведённый мной цитат). Это, по-твоему, можно расценивать как полное отсутвие в стандарте информации по данному топику? Добавлено через 31 секунду Нет. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
блин. а я грешным делом подумал, что речь идет о чем-то, что находится до адреса, на который указывает указатель
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
стандарт на работе - завтра погляжу а из 2х цитат сейчас следует только то, что reinterpret_cast обязан приводить указатель на ПОД к указателю на первое поле... если в примечании написано то, чтоговоришь, тогда я был неправ |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |