|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.02.2021, 21:53 | #1 | |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Поиск объекта памяти.
Здравствуйте! И опять вопрос:
Цитата:
Код:
Исхожу из того, что указатель указывает на начало класса, соответственно, если к началу прибавить размер класса, то я попадаю в конец отведённой под мой класс памяти. Почему размер класса равен 32? ведь 1 + 4 + 4 + 4 + 8 + 4 = 25, а не 32, не ясно. Код:
|
|
26.02.2021, 07:47 | #2 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
apofioz, 32 - это из-за выравнивания. Чтобы не было выравнивания (хотя, зачем это тут) можно выставить выравнивание
Код:
Код:
Код:
можно "спровоцировать" более компактное размещение переупорядочиванием полей и без прагмы. Например, если самое длинное поле у нас 32 бита, то можно его разместить первым, а 16 и 8 - после него. Тогда паддинг будет всего 1 байт Последний раз редактировалось Алексей1153; 26.02.2021 в 07:53. |
26.02.2021, 12:34 | #3 | |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Это я спросил ради любопытства, когда получил результат размера класса, через sizeof(), то сомнения одолели, что там добавляет ещё компилятор, откуда такой размер...
Цитата:
Это что за конструкция, функтор? Альтернативный стиль это написание функции для каждого типа? (&x + 1) почему '+1' и точно попадаете на конец структуры? Почему бы тогда не написать что то такое: Код:
Всё равно, спасибо, я бы сам до этого не дошёл. Значит напрямую с памятью работать нельзя, по крайней мере в С++, а если ассемблер подключить? Последний раз редактировалось apofioz; 26.02.2021 в 16:22. |
|
26.02.2021, 16:06 | #4 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
лямбда-выражение
можно заменить на аналогичную шаблонную функцию, но в данном случае мне лямбда показалась удобнее тут нельзя будет подставить любой тип. Да и цикл какой-то нечитабельный. А каст адреса константной переменной к неконстантному (unsigned char*) - это совсем плохо этот код и так "работает напрямую с памятью" (внутри лямбды print_hex) или что ты имеешь в виду под работой с памятью? |
26.02.2021, 16:07 | #5 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
|
26.02.2021, 16:23 | #6 | |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Цитата:
Имею ввиду работу с памятью на нижнем уровне, насколько возможно, конечно, где можно получить доступ к реальным объектам в реальной памяти, по реальным адресам. Как-то так. В курсе, что арифметика. Почему тогда + 1 указывает на конец данной области. Код:
Теперь лучше. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Адрес объекта в памяти | Artempokrowski | Общие вопросы Delphi | 13 | 09.04.2012 20:37 |
[C#] Поиск объекта по образцу | OverDosser | Фриланс | 1 | 06.11.2011 21:22 |
ПОиск объекта на изображении | TacoBell | Qt и кроссплатформенное программирование С/С++ | 7 | 26.10.2010 13:47 |
Поиск объекта на картинке | Terran | Общие вопросы Delphi | 3 | 21.05.2010 16:35 |
Как изменять свойства и функцыи объекта в памяти? | VintProg | Общие вопросы Delphi | 2 | 10.07.2009 15:29 |