|
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
|
|
Размер указателя25.04.2016, 18:36. Показов 16932. Ответов 75
Метки нет (Все метки)
sizeof(void*);// Размер указателя на любой тип равен 8, почему так много? И можно ли как-нибудь узнать сколько под указатель выделено памяти не смотря в исходники?
0
|
|
| 25.04.2016, 18:36 | |
|
Ответы с готовыми решениями:
75
Размер строки указателя Размер указателя short int Размер указателя на разные типы данных |
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||||
| 27.04.2016, 20:10 | ||||||||
this и вот в таком случае, хотя никакого множественного наследования тут нет
Код возможно-спорно компактней, но уж точно не быстрее. Ваш код медленее. ---------------------------------- Тут еще мешает от факт, что язык С++ требует четко определенной сравниваемости на равенство-неравенство указателей на невиртуальные методы. Это означает, в частности, что сэкономить на генерации ваших "вызывалок" не получится: для каждого целевого невиртуального метода придется генерировать отдельную вызывалку, даже если "дельта" коррекции this у них одна и та же. Просто для того, чтобы ваши указатели на разные методы получились разными.Тут надо еще заметить, что компиляторы давно уже используют ваш метод с промежуточной вызывалкой в ситуациях, когда указатель инициализируется адресом виртуального метода. Указатель в такой ситуации ставится именно на промежуточную вызывалку. При этом они старательно экономят на генерации вызывалок - используется одна и та же промежуточная вызывалка для методов разных классов, занимающих одну и ту же позицию в VMT (и, возможно, одну и ту же "дельту" для this). Т.е. на низком уровне вызывалки с одинаковым результирующим кодом смело сливаются в одну. Таким образом обвинять авторов компиляторов в "лени" следовать этому подходу не приходится: они ему уже следуют в случае с виртуальными методами.Однако в случае с невиртуальными методами этот подход не используется. Возможно, именно из-за невозможности "сэкономить" не генерации отдельных вызывалок.
0
|
||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||||
| 27.04.2016, 20:43 | |||||||||
|
1) Процессор работает с машинными словами. void* можно записать куда ни будь одной командой, потому что void* влезает в машинное слово. А вот std::pair<void*,size_t> в машинное слово не влезает и одной командой его записать нельзя. Значит, нужно две команды и код раздувается. 2) Чтобы передать указатель в callFoo, его надо записать в специально отведенное место. Стек или регистры процессора - не важно. Чем толще указатель, тем дольше будете записывать. Прямое следствие пункта 1. 3) Чтобы вызвать метод, вам нужно вычесть ptrdiff из this. На уровне ассемблера это делается одной командой. А вот под капотом процессора это все равно превратится в батарею "вычислить адрес, прочитать, вычесть". Это опять же тормознутей чем "вычесть вшитую в код константу". Хотя, может вам повезет и ptrdiff будет изначально в регистре.
0
|
|||||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 27.04.2016, 20:56 | |||
|
Если мы прочитали указатель с ptrdiff - он гарантированно в кэше. А ваша вызывалка? Сперва дергаем в кэш вызывалку, потом дергаем в кэш сам метод. Разницы не видите? Добавлено через 4 минуты
0
|
|||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|||||||
| 27.04.2016, 20:58 | |||||||
0
|
|||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 27.04.2016, 21:07 | |||
|
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 27.04.2016, 21:14 | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 27.04.2016, 21:30 | |||
|
И да, один кэш-мисматч на тысячу вызовов, от двух кэш-мисматчей на тысячу вызовов я без лупы не отличаю.
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 28.04.2016, 10:19 | |||
|
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 28.04.2016, 11:56 | |||
|
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 28.04.2016, 12:22 | ||
|
Добавлено через 10 минут Renji, Чтобы скорректировать указатель, в любом случае надо прочитать величину коррекции. Только в вашем случае читается адрес по которому лежит вызывалка (часть call вызывалка), а потом читается смещение (внутри вызывалки), а потом читается адрес метода (как jmp метод). В моем случае читатется смещение и читается адрес метода (причем все лежит рядом и в кэше).
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 28.04.2016, 13:10 | |||
|
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 28.04.2016, 16:01 | |||
|
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 28.04.2016, 16:35 | |||
|
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 29.04.2016, 10:41 | ||
|
Добавлено через 4 минуты Предупреждая отсылки к предсказанию ветвей и пр. - они принципиально ничего не меняют.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 29.04.2016, 12:39 | |||
|
0
|
|||
| 29.04.2016, 14:46 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 29.04.2016, 15:02 | ||
|
Не по теме: PAE предназначена для механизма отображения страниц виртуальной памяти, на страницы памяти физической. Размеры адресного пространства плоской модели PAE увеличить не может, так как они завязаны на размер регистра.
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 29.04.2016, 15:20 | |||
|
Добавлено через 7 минут Добавлено через 4 минуты
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 29.04.2016, 15:35 | |||
|
Добавлено через 2 минуты
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 29.04.2016, 16:09 | ||
|
Но, зачем городить огород (особенно новый keyword) если это не дает никакого профита?
0
|
||
| 29.04.2016, 16:09 | |
|
Как верно узнать размер указателя ?
Создание указателя на экземпляр класса, описанного после объявления указателя Преобразование кода без указателя в код с использованием указателя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|