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

Конечно один.
...
Рейтинг: 0 / 0
Как объект выглядит в памяти.
    #39450863
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод компилируется в обычную функцию, к которой добавляется еще один параметр T* this, т.е. указатель на данные объекта.
...
Рейтинг: 0 / 0
Как объект выглядит в памяти.
    #39450867
da17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, я имел в виду ассемблерный код. Т.е. есть где-то в памяти располагается ф-ия которая при вызове получает адресс экземпляра класса и на основании этого адресса вычисляет значения полей класса?
...
Рейтинг: 0 / 0
Как объект выглядит в памяти.
    #39450869
da17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как все это устроено, я что-то даже не соображу где про это почитать можно, кроме как самому отладчик запускать и смотреть.
...
Рейтинг: 0 / 0
Как объект выглядит в памяти.
    #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
Как объект выглядит в памяти.
    #39450885
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
da17Как все это устроено, я что-то даже не соображу где про это почитать можно, кроме как самому отладчик запускать и смотреть.
Ты с какой целью интересуешься?

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

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

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

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

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

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

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

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

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


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