C++. Где и как хранится информация о типе указателя? (Это вопрос НЕ о том, как узнать тип)

Модератор: Модераторы разделов

vipermagi
Сообщения: 83
ОС: AgiliaLinux

C++. Где и как хранится информация о типе указателя?

Сообщение vipermagi »

После создания узказателя на динамическую область памяти какого-то типа, сами эти полезные данные находятся в динамической памяти, а содержимое указателя(запись адреса динамической памяти) находятся, видимо, в стеке.
Указатель - это переменная. Содержимое этой переменной - адрес. Собственно вопрос: где и как поживает информация о типе данных, на которые ссылается содержимое указателя, когда и кем она используется? Ну и интересуют книжки, в которых в таком ключе освещаются подобные подробности.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Где и как хранится информация о типе указателя?

Сообщение NickLion »

Для простых типов — нигде не хранится на самом деле. Эта информация известна на этапе компиляции и соответственно вызываются соответствующие операции для данного типа.

Объекты с виртуальными методами хранят указатель на таблицу виртуальных функций. По этому указателю можно определить тип объекта (см. dynamic_cast).
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Где и как хранится информация о типе указателя?

Сообщение vipermagi »

Хотелось бы поподробнее разузнать как происходит это "нигде". Например тип определяет длину байт как минимум необходимую для выделения памяти. Куда эта информация девается после компиляции и откуда берётся при выполнении программы.

Добрую литературку не порекомендуете-с?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Где и как хранится информация о типе указателя?

Сообщение NickLion »

vipermagi писал(а):
10.05.2013 16:11
Хотелось бы поподробнее разузнать как происходит это "нигде". Например тип определяет длину байт как минимум необходимую для выделения памяти. Куда эта информация девается после компиляции и откуда берётся при выполнении программы.

Ну, очень грубо, int* p = new int[5] преобразуется в *p = malloc(5*sizeof(int)).
p[3] = 5; в (Intel синтаксис)
mov ebx, p
mov dword ptr [ebx+12], 5
Т.е. эта информация о типе "захардкожена" в выходном машинном коде.

vipermagi писал(а):
10.05.2013 16:11
Добрую литературку не порекомендуете-с?

Тут лучше наверное по Си литературку посмотреть. Там чаще такое рассматривается. Но так на вскидку не упомню, я мало книг читал, больше дизассемблером баловался.

UPD а может даже лучше литературу по компиляторам смотреть.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: C++. Где и как хранится информация о типе указателя?

Сообщение Stauffenberg »

vipermagi писал(а):
10.05.2013 15:34
Ну и интересуют книжки, в которых в таком ключе освещаются подобные подробности.


Есть такая "книга дракона" (второе издание). Среди хакеров она одна из первых в списке must read.
Ну и священное писание от Дениса Ритчи.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: C++. Где и как хранится информация о типе указателя?

Сообщение serzh-z »

vipermagi
http://en.wikipedia.org/wiki/Run-time_type_information - это единственная стандартизованная информация о типе, доступная операторам и функциям компилятора в С++. Никакой другой информации о типе не существует, и нельзя сказать, в рантайме, какого же типа данные находятся по указанному адресу. См. стандартный хидер typeinfo.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C++. Где и как хранится информация о типе указателя?

Сообщение drBatty »

vipermagi писал(а):
10.05.2013 15:34
Ну и интересуют книжки, в которых в таком ключе освещаются подобные подробности.

ну я-бы написал эту книгу…

вы будете её читать?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Где и как хранится информация о типе указателя?

Сообщение vipermagi »

drBatty писал(а):
11.05.2013 08:52
ну я-бы написал эту книгу…

Всмысле как автор?

drBatty писал(а):
11.05.2013 08:52
вы будете её читать?

Ну дракона я уже начал читать. Надеюсь найду там много интересного.

Мне главное, чтобы на русязе. На английском можно только какие-нибудь статьи или мануалы, но ни как не книги, тем более страниц под 1000, как книга дракона.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C++. Где и как хранится информация о типе указателя?

Сообщение drBatty »

vipermagi писал(а):
11.05.2013 14:36
Ну дракона я уже начал читать. Надеюсь найду там много интересного.

ага. Вот и читайте. Я про другой "ключ" говорил: писать о том, чего нет. Например в Pure C нет RTTI. В C++ есть, но такой особый, своеобразный. Я-бы сказал - костыльный. Ну уж какой есть…
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: