|
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
|
|
Размер указателя25.04.2016, 18:36. Показов 16894. Ответов 75
Метки нет (Все метки)
sizeof(void*);// Размер указателя на любой тип равен 8, почему так много? И можно ли как-нибудь узнать сколько под указатель выделено памяти не смотря в исходники?
0
|
|
| 25.04.2016, 18:36 | |
|
Ответы с готовыми решениями:
75
Размер строки указателя Размер указателя short int Размер указателя на разные типы данных |
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,393
|
|||||
| 26.04.2016, 22:55 | |||||
this делаются inline непосредственно в точке вызова.this и передает управление по указателю на метод. Ничего сложного тут нет."Тормознутее", она, конечно, будет из-за того, что при вызове значение "дельта" читается из памяти (т.е. из указателя), в то время как в вашем случае дельта прошита непосредственно в код. Но если учесть, что мы в это время занимаемся вызовом функции по прочитанному из памяти указателю, "торможение" это - чисто теоретическое. Child не просто используется, а используется важнейшим образом! В моем коде метод foo наследуется в класс Parent именно из класса Child. Именно по этой причине в моем коде &Parent::foo имеет тип void (Child::*)(). Эта деталь - ключевой момент моего кода.
0
|
|||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||
| 26.04.2016, 23:00 | ||||||||
1
|
||||||||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,393
|
||||||||||||||
| 26.04.2016, 23:17 | ||||||||||||||
void (Child::*)() в void (Parent::*)()Для этого нужен другой пример
Добавлено через 8 минут this будет делать еще один call - уже в реальный метод.Это в "моем" случае call как раз таки будет единственным. А коррекция this из памяти выливается в "традиционной" реализации в единственную машинную инструкцию. Поэтому причин для жалоб на раздувание кода я тут не вижу.Еще неизвестно, что хуже... Не знаю, зачем тут ваш "mov и sub". Обычно this готовится в rcx, т.е. для коррекции this достаточно add rcx, [память], т.е. никакого mov. Разумеется, на платформе, поддерживающей арифметику регистр-память.
0
|
||||||||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 26.04.2016, 23:46 | ||||
|
0
|
||||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,393
|
|
| 27.04.2016, 00:10 | |
|
del
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 27.04.2016, 00:18 | ||
|
0
|
||
|
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
|
||||||
| 27.04.2016, 10:17 | ||||||
|
Снова вернулся к этой теме - уж больно она мне покоя не дает.
Итак, поигрался я немного с битовыми полями - и получается, что указатель размером 32 бита при условии что из этого указателя один бит забирает система на свои нужды как раз способен проиндексировать только 2 Гб памяти. код ниже. Кликните здесь для просмотра всего текста
0
|
||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 27.04.2016, 13:12 | |
|
Че-то вы увлеклись, и за деревьями леса не видите. А надо всего лишь задаться вопросом, почему нельзя, например, передать указатель на член как void*? В указателе на член потомка может быть как указатель на член потомка, так и указатель на член предка. Один this надо корректировать, другой нет. И известно это только в рантайме. Поэтому без дополнительного ptrdiff_t не обойтись.
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 27.04.2016, 13:48 | ||
|
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||||||||
| 27.04.2016, 14:18 | ||||||||
0
|
||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 27.04.2016, 15:34 | |||||||
|
Предупреждая "фи, как неудобно" - сделайте преобразование "указатель на метод предка->указатель на метод потомка" без плясок с бубном, но с множественным наследованием ромбом. Множественное наследование как бы изначально источник не очевидных грабель. И не особо понятно почему страдать от этих грабель должны не 1% пользователей множественного наследования, а 99% тех, кому оно даром не нужно. Особенно, если цена вопроса - одно ключевое слово.
0
|
|||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 27.04.2016, 15:52 | ||
|
Добавлено через 7 минут А самое главное терятся весь смысл в предобъявлении (чем больше надо знать про класс - тем больше предобъявление становится похожим на определение).
1
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 27.04.2016, 15:57 | ||||
|
1) Сохранение адреса метода. 2) Сохранение ptrdiff_t, что внезапно требует "вхардкодить константы" в каждую точку создания этого самого указателя. Вызов по 16 байтовому указателю: 1) Прочитать адрес метода. 2) Вычесть ptrdiff_t из указателя на объект. Вхардкордив это вычитание в каждую точку вызова. 3) Вызвать метод. Создание 8-байтового указателя без ptrdiff_t: 1) Сохранить адрес метода. Вызов по 8-байтовому указателю: 1) Прочитать адрес метода. 2) Вызвать метод. "Вычесть ptrdiff_t из указателя на объект" делает код метода, в который ptrdiff_t Вхардкорден один раз. Не замечаете что в моем варианте число действий меньше, а код компакней и быстрее? Смысл в предобъявлении в том, чтобы разрешить рекурсивные зависимости (в классе А ссылки на класс Б, в классе Б ссылки на класс А). И этому ключевое слово не мешает никак.
0
|
||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 27.04.2016, 16:06 | |||
|
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||
| 27.04.2016, 16:20 | ||||||||
0
|
||||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||||||
| 27.04.2016, 16:25 | |||||||
|
Вот вам пример без всякого множественного наследования:
0
|
|||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||||||
| 27.04.2016, 16:45 | ||||||||||||
UPD Хотя нет, вру, при добавлении виртуальных методов, база смешается. В таком случае компилятор, в моем представлении, должен разворачивать код примерно в следующее:
0
|
||||||||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 27.04.2016, 17:01 | |||
![]() Добавлено через 6 минут Если так разворачивать, то на каждую пару в иерархии потребуется свой метод (Если классов 10 потребуется 90 оберток, вместо одного ptrdiff)
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 27.04.2016, 17:34 | |||
|
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 27.04.2016, 19:36 | ||
|
0
|
||
| 27.04.2016, 19:36 | |
|
Как верно узнать размер указателя ?
Создание указателя на экземпляр класса, описанного после объявления указателя Преобразование кода без указателя в код с использованием указателя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|