Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как объект выглядит в памяти. / 25 сообщений из 25, страница 1 из 1
10.05.2017, 15:35
    #39450848
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Подскажите, если есть класс и есть объекты этого класса, то при создании объекта этого класса где в памяти расположены методы данного класса, как это выглядит, один метод для всех объектов?
...
Рейтинг: 0 / 0
10.05.2017, 15:49
    #39450860
Как объект выглядит в памяти.
da17,

Конечно один.
...
Рейтинг: 0 / 0
10.05.2017, 15:52
    #39450863
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Метод компилируется в обычную функцию, к которой добавляется еще один параметр T* this, т.е. указатель на данные объекта.
...
Рейтинг: 0 / 0
10.05.2017, 16:01
    #39450867
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Dima T, я имел в виду ассемблерный код. Т.е. есть где-то в памяти располагается ф-ия которая при вызове получает адресс экземпляра класса и на основании этого адресса вычисляет значения полей класса?
...
Рейтинг: 0 / 0
10.05.2017, 16:03
    #39450869
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Как все это устроено, я что-то даже не соображу где про это почитать можно, кроме как самому отладчик запускать и смотреть.
...
Рейтинг: 0 / 0
10.05.2017, 16:21
    #39450881
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17Dima T, я имел в виду ассемблерный код. Т.е. есть где-то в памяти располагается ф-ия которая при вызове получает адресс экземпляра класса и на основании этого адресса вычисляет значения полей класса?
Да. Объект это тоже самое что структура. Как структура в памяти располагается представляешь? Расположение полей жестко закреплено относительно адреса объекта.
Например
Код: plaintext
1.
2.
3.
4.
class A {
  int x;
  method();
}


После компиляции выглядит так
Код: plaintext
1.
2.
3.
4.
5.
struct A {
  int x;
}

method(A* this);


Если есть виртуальные методы, то в структуру добавляется таблица виртуальных методов, т.е. таблица адресов методов для этого объекта.
...
Рейтинг: 0 / 0
10.05.2017, 16:24
    #39450885
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17Как все это устроено, я что-то даже не соображу где про это почитать можно, кроме как самому отладчик запускать и смотреть.
Ты с какой целью интересуешься?

Обычно все что надо знать по этой теме - это sizeof(), сколько памяти объект занимает и про выравнивание структур .
...
Рейтинг: 0 / 0
10.05.2017, 16:37
    #39450892
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Dima TОбычно все что надо знать по этой теме - это sizeof()
зачем себя так ограничивать?
...
Рейтинг: 0 / 0
10.05.2017, 16:45
    #39450897
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Dima T, без конкретной цели, любопытство
...
Рейтинг: 0 / 0
10.05.2017, 16:55
    #39450905
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Dima Tda17Как все это устроено, я что-то даже не соображу где про это почитать можно, кроме как самому отладчик запускать и смотреть.
Ты с какой целью интересуешься?

Обычно все что надо знать по этой теме - это sizeof(), сколько памяти объект занимает и про выравнивание структур .
я читал эту статью, только одного не понял, если процессор считывает данные по 4 байта, и в случае если ему необходимо получить данные размером байт, куда он их, сразу в регистр какой-нибудь считывает, потом ведь придется этот байт извлекать, что потребует дополнительных операций. В чем экономия?
...
Рейтинг: 0 / 0
10.05.2017, 17:16
    #39450910
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17Dima T, без конкретной цели, любопытство
Тогда стоит ассемблер поизучать.
da17я читал эту статью, только одного не понял, если процессор считывает данные по 4 байта, и в случае если ему необходимо получить данные размером байт, куда он их, сразу в регистр какой-нибудь считывает, потом ведь придется этот байт извлекать, что потребует дополнительных операций. В чем экономия?
Это уже специфика работы процов, я глубоко эту тему не изучал, гугли выравнивание данных в памяти
...
Рейтинг: 0 / 0
10.05.2017, 17:24
    #39450915
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
В вике не сообщено главное: x86-архитектура "прощает" невыровенные чтение/запись - аппаратура сама разберёт/соберёт обращение к невыровненному участку памяти. Хотя во флагах процессора предусмотрен и "строгий режим".
...
Рейтинг: 0 / 0
10.05.2017, 17:36
    #39450923
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Basil A. SidorovВ вике не сообщено главное: x86-архитектура "прощает" невыровенные чтение/запись - аппаратура сама разберёт/соберёт обращение к невыровненному участку памяти. Хотя во флагах процессора предусмотрен и "строгий режим".
Есть еще SSE и AVX, кторые требуют выравнивания.

Intel про выравнивание
авторКогда мы оперируем с элементами массивов (и не только с ними), то на самом деле постоянно работаем с кэш-линиями размером по 64 байта. SSE и AVX векторы всегда попадают в одну кэш линию, если они выравнены по 16 и 32 байта, соответственно. А вот если наши данные не выравнены, то, очень вероятно, нам придётся подгружать ещё одну «дополнительную» кэш-линию.
Я так понимаю если даже 2 байта не выравненные попадут на стык кэш-линий, то уже будет доп.тормоз.
...
Рейтинг: 0 / 0
10.05.2017, 17:45
    #39450927
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Dima TЕсть еще SSE и AVX, кторые требуют выравнивания.Странно требовать от "векторизирующих" расширений, ориентированных на максимальную скорость обработки, халявы с доступом в память. Особенно с учётом того, что доступа этого с гулькин нос.Я так понимаю если даже 2 байта не выравненные попадут на стык кэш-линий, то уже будет доп.тормоз.Странный вы человек ...
Невыровненные чтения - тормоз при любом раскладе. Какая разница, сколько добавят к уже имеющимся накладным расходам эффекты второго порядка.
Важно то, что остальные архитектуры требуют выравнивать данные и наказывают расхлябанность исключениями и прочими малоприятными вещами.
...
Рейтинг: 0 / 0
10.05.2017, 17:51
    #39450929
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Basil A. SidorovВажно то, что остальные архитектуры требуют выравнивать данные
IBM/370 от этого уже отказась в незапяматные годы.
...
Рейтинг: 0 / 0
10.05.2017, 19:30
    #39450978
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Dima T...Если есть виртуальные методы, то в структуру добавляется таблица виртуальных методов, т.е. таблица адресов методов для этого объекта.
Не таблица, а только указатель на нее.
В случае множественного наследования - несколько указателей.

Все можно легко увидеть с помощью godbolt.org
...
Рейтинг: 0 / 0
10.05.2017, 23:33
    #39451058
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17Dima Tпропущено...

Ты с какой целью интересуешься?

Обычно все что надо знать по этой теме - это sizeof(), сколько памяти объект занимает и про выравнивание структур .
я читал эту статью, только одного не понял, если процессор считывает данные по 4 байта, и в случае если ему необходимо получить данные размером байт, куда он их, сразу в регистр какой-нибудь считывает, потом ведь придется этот байт извлекать, что потребует дополнительных операций. В чем экономия?
Играть с опциями pragma кмк имеет смысл только тогда, когда нужно быстро сериализировать
большие множества объектов на диск. И при этом нужны гарантии что эти структуры на диске
можно потом как-то разобрать и распарить в другой системе (среде или ЯП).
...
Рейтинг: 0 / 0
10.05.2017, 23:45
    #39451060
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
mayton,

Не только на диск, но и в сеть
...
Рейтинг: 0 / 0
11.05.2017, 05:13
    #39451075
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17я читал эту статью, только одного не понял, если процессор считывает данные по 4 байта, и в случае если ему необходимо получить данные размером байт, куда он их, сразу в регистр какой-нибудь считывает, потом ведь придется этот байт извлекать, что потребует дополнительных операций. В чем экономия?вроде как это всё делается через регистры общего назначения. Например, для 4 байт используется eax, для двух ax, для байта al (ah для верхнего байта нижнего слова). Это всё один регистр, просто разные его части. Записав в eax 1, получим в al тоже 1. Как это реализовано в железе, я не знаю. Код можно посмотреть под отладкой.
...
Рейтинг: 0 / 0
11.05.2017, 07:34
    #39451087
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17я читал эту статью, только одного не понял, если процессор считывает данные по 4 байта, и в случае если ему необходимо получить данные размером байт, куда он их, сразу в регистр какой-нибудь считывает, потом ведь придется этот байт извлекать, что потребует дополнительных операций. В чем экономия?
Для простоты операции с регистрами можно считать бесплатной.

Это даже быстрее кеша L1
https://habrahabr.ru/post/108537/
...
Рейтинг: 0 / 0
11.05.2017, 11:12
    #39451205
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
Siemarglda17я читал эту статью, только одного не понял, если процессор считывает данные по 4 байта, и в случае если ему необходимо получить данные размером байт, куда он их, сразу в регистр какой-нибудь считывает, потом ведь придется этот байт извлекать, что потребует дополнительных операций. В чем экономия?
Для простоты операции с регистрами можно считать бесплатной.

Это даже быстрее кеша L1
https://habrahabr.ru/post/108537/
ясно, т.е. главное взять данные из памяти, а временными затратами на обработку пренебрегаем.
...
Рейтинг: 0 / 0
11.05.2017, 11:23
    #39451214
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17ясно, т.е. главное взять данные из памяти, а временными затратами на обработку пренебрегаем.
этих "затрат" может даже не быть, но это уже на уровне микроархитектуры смотреть нужно
...
Рейтинг: 0 / 0
11.05.2017, 13:30
    #39451335
da17
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
получается вся "задумка" выравнивания нужна исключительно для удобства обмена данными, а про быстродействие и речи даже не идет?
...
Рейтинг: 0 / 0
11.05.2017, 13:45
    #39451349
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17получается вся "задумка" выравнивания нужна исключительно для удобства обмена данными, а про быстродействие и речи даже не идет?
выравнивание как раз для быстродействия.
упаковка - для обмена данными
выравнивание применяется ещё и на границу линии кэша или на границу страницы
...
Рейтинг: 0 / 0
11.05.2017, 13:46
    #39451350
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объект выглядит в памяти.
da17получается вся "задумка" выравнивания нужна исключительно для удобства обмена данными, а про быстродействие и речи даже не идет?
Наоборот. Для быстродействия надо выравнивание. Для обмена надо отключение выравнивания, чтобы "дырки" не занимали лишнее место на диске или лишний трафик не создавали.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как объект выглядит в памяти. / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]