![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
А не проще создать свой struct (можно без преферанса и балерин), описывающий требуемые данные, затем указателю на этот struct присвоить значение начального адреса, а затем обращаться к полям через этот указатель и через стрелку
Это сообщение отредактировал(а) borisbn - 16.3.2012, 06:57 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
volatile
инты вполне подходят, так как исполняемый код может быть 32 или 64, а размерность данных все время та же самая остается. borisbn да можно и как , вполне рабочий вариант, я так пробовал. единственное но, после компиляции получается следующее 1) данная структура определяется в памяти как не инициализированые данные 2) *ptr = (MyStruct*)addr; - приводит к копированию части данных (memcpy) на область определенную в пункте 1 что меня не вполне устраивает -------------------- |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
объект типа MyStruct нигде не создаётся. создаётся указатель на такую структуру
нет. данные не копируются. делается простое приведение типов (из указателя на char, т.е. из addr, в указатель на MyStruct, т.е. ptr). а звёздочка перед ptr в моём примере это не разыменовывание указателя, а создание указателя. Лучше переписать так, чтобы было понятней
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
Правильно, в файловой секции он места не занимает, размер который занимает обьект выделяется при загрузке файла. И туда потом копируется ptr = (MyStruct*)addr; кусок данных размером с MyStruct (проверено дизасемблером) )) -------------------- |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
не размером MyStruct, а размером MyStruct*, т.е. просто указатель. 4 байта на 32х или 8 байт на 64х. проверено веками) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
попробуй откомпили, нет шас под рукой компилера но есть дизасм )
а я посмотрю -------------------- |
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Инты в качестве адреса не подходят, т.к. 'размерность данных все время та же самая остается', а размер указателя меняется Добавлено через 10 минут и 35 секунд Вот, gcc 64 бита:
Асм слегка подрезал
Как видим никаких MyStruct нигде не заводится, только указатель ptr Добавлено через 13 минут и 54 секунды Кстати, оно же с оптимизацией
|
||||||||
|
|||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |