Как выглядит объект в памяти?
От: na1s  
Дата: 14.09.07 18:51
Оценка:
Читал Страуструпа, не нашел описания как выглядит объект в памяти, там написано немного лишь про о объект с виртуальными функциями? Где почерпнуть знания?
... << RSDN@Home 1.2.0 alpha rev. 685>>
Re: Как выглядит объект в памяти?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.09.07 19:12
Оценка:
Здравствуйте, na1s, Вы писали:

N>Читал Страуструпа, не нашел описания как выглядит объект в памяти, там написано немного лишь про о объект с виртуальными функциями? Где почерпнуть знания?


Это зависит от компилятора. Большенство компиляторов располагают по смещению 0 указатель на табилцу виртуальных функций, а далее следуют поля класса. При наследовании поля и табилца виртуальных функций дополняются полями и виртуальными функциями потомка. Это делает восходящее приведение типов безопсным.
Re: Как выглядит объект в памяти?
От: Erop Россия  
Дата: 14.09.07 19:41
Оценка:
Здравствуйте, na1s, Вы писали:

N>Читал Страуструпа, не нашел описания как выглядит объект в памяти, там написано немного лишь про о объект с виртуальными функциями? Где почерпнуть знания?


тут немного инфы есть
Автор: Erop
Дата: 28.10.05

А вообще-то надо на примере конкретного компилятора смотреть, конечно.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Как выглядит объект в памяти?
От: na1s  
Дата: 15.09.07 18:25
Оценка:
Вот если есть объект, просто без наследования, как он выгядит в памяти? Например объект — два числа и функция вывода, функция находится рядом с этими числами или как?
... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[2]: Как выглядит объект в памяти?
От: Аноним  
Дата: 15.09.07 19:52
Оценка:
Здравствуйте, na1s, Вы писали:

N>Вот если есть объект, просто без наследования, как он выгядит в памяти? Например объект — два числа и функция вывода, функция находится рядом с этими числами или как?

Нет, функция будет находиться отдельно.
Например, если есть такой класс
class X
{
    int a;
    int b;
public:
    void print();
};

И ты создашь объект на стеке или в куче:
...
{
    X obj; // создали объект класса X на стеке
    X* pobj = new X(); // выделили память в куче
}

то будет выделено sizeof(a)+sizeof(b) байт и переменные a и b будут лежать в памяти примерно так:
+-------+-------+
| int a | int b |
+-------+-------+

Код функции print будет размещен где-то в другом месте. Одна и та же функция будет использоваться для всех объектов класса X. Чтобы функция print знала данные-члены какого именно объекта выводить, ей неявно, первым параметром, передается указатель на объект для которого она вызывается.

Подробней можно здесь почитать.
C++: Under the Hood
Re[3]: Как выглядит объект в памяти?
От: JohnCapfull Россия http://johncapfull.livejournal.com
Дата: 17.09.07 08:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>то будет выделено sizeof(a)+sizeof(b) байт и переменные a и b будут лежать в памяти примерно так:

А>| int a | int b |

Стандартом это как-нибудь регламентировано? Или implementation-defined?
Re[4]: Как выглядит объект в памяти?
От: Erop Россия  
Дата: 17.09.07 19:26
Оценка:
Здравствуйте, JohnCapfull, Вы писали:

JC>Стандартом это как-нибудь регламентировано? Или implementation-defined?

В целом что-то регламентированно для POD. Остальное -- как получится, но реализации отличаются не глобально в целом.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Как выглядит объект в памяти?
От: Аноним  
Дата: 18.09.07 07:17
Оценка: :)))
вот так:
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.