реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Динамически создаваемые объекты классов, Принцип работы
Yaumen
сообщение Jun 17 2010, 05:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



В одном из проектов не нашел ничего более удобного как использование динамически создаваемых классов. Создаваться они будут один раз при запуске и в процессе работы удаляться и пересоздаваться не будут. Какие именно классы будут создаваться и использоваться будет задаваться проектом!!! При запуске, я буду считывать из проекта необходимые данные и в зависимости от них буду создавать те или иные классы, причем возможны и несколько объектов одного класса.

На PC, в моем представлении, объект класса создается в оперативной памяти, однако в ARM оперативная память используется для хранения данных, а собственно исполняемый код находится во флэш, и естественно ничего динамически там создать нельзя. Можно ли использовать динамически создаваемые объекты на ARM и как они в этом случае работают!?

P.S. На всякий случай уточню, что программа пишется под LPC2366 (ARM7)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 17 2010, 06:04
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Для уяснения этого вопроса абстрагируйтесь от классов. Считайте, что это просто объект, такой же как int. Теперь знаете ответ на свой вопрос?
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Jun 17 2010, 06:28
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Цитата(sergeeff @ Jun 17 2010, 09:04) *
Для уяснения этого вопроса абстрагируйтесь от классов. Считайте, что это просто объект, такой же как int. Теперь знаете ответ на свой вопрос?

Нет не знаю. Динамический int выделяет память в оперативной памяти, а вся работа ведется через указатель. В случае же с классом, помимо данных есть методы, которые не могут быть расположены в памяти, а следовательно они должны всегда присутствовать во флеше, не зависимо от того использую я их или весь класс или нет. Если это так, то в эти функции как-то неявно должен передаваться указатель на динамически созданные данные в памяти. Это моя модель, а как на самом деле я и пытаюсь понять!!!
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 17 2010, 06:42
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Не думаю, что поведение классов на АРМ будет как то отличаться от ПК.
Все методы класса (функции) будут расположены во флеш (read only memory), а все переменные - в озу (read/write memory).

Естественно, обращение к обьектам идёт через уникальный для каждого из них указатель.
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Jun 17 2010, 06:48
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Т.е. все-таки это примерно та модель, которую я обрисовал. Все методы компилируются во флеше, независимо от того используются они или нет, а все данные, с которыми будут работать методы динамически созданного объекта класса каким-то образом неявно передаются в методы в виде указателей. Возможно на ПК все так же, только там я этому не придавал значения.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 17 2010, 06:53
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Yaumen @ Jun 17 2010, 10:48) *
Т.е. все-таки это примерно та модель, которую я обрисовал. Все методы компилируются во флеше, независимо от того используются они или нет, а все данные, с которыми будут работать методы динамически созданного объекта класса каким-то образом неявно передаются в методы. Возможно на ПК все так же, только там я этому не придавал значения.

Совершенно верно.
За исключением того, что при оптимизации неиспользуемые методы будут удалены.
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Jun 17 2010, 07:01
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Удалены будут только те методы, которые вообще нигде в программе не используются, я же имел в виду, что методы будут располагаться в памяти флэша, даже если я не создал динамически объект класса, в котором они используются smile.gif)

Раз уж описанная мной методика верна, то, интересно, насколько она замедляет работу по сравнению с обычными объектами, созданными статически. Есть статистика?
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 17 2010, 07:26
Сообщение #8


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Код программы на АРМах может располагаться и в ОЗУ, еслинужно, то есть при развёртывании программы он будет скопирован из флеш.

Вся разница между динамически создаваемыми временными обьектами и статическими постоянными - имхо, в затратах на обработку конструкторов/деструкторов и в запросах памяти из кучи (new/delete).
Go to the top of the page
 
+Quote Post
baralgin
сообщение Jun 17 2010, 08:11
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Статические объекты компилятор сможет лучше отоптимизировать, поэтому они могут работать чуть быстрее(адреса данных заранее известны).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 17 2010, 12:52
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Yaumen @ Jun 17 2010, 10:01) *
Удалены будут только те методы, которые вообще нигде в программе не используются, я же имел в виду, что методы будут располагаться в памяти флэша, даже если я не создал динамически объект класса, в котором они используются smile.gif)
Если во всей вашей программе нет ни одного создания объекта какого-то класса (неважно - автоматически (на стеке, локально), статически (глобально) или динамически (через оператор new()), и нет ни одного обращения к функциям-членам (например, через приведенный указатель), то весь код этого класса будет выкинут. Если объект создается или есть обращения через приведенный указатель, но нет ни одного обращения к невиртуальной функции-члену, то код этой функции-члена будет выкинут.
Цитата(baralgin @ Jun 17 2010, 11:11) *
Статические объекты компилятор сможет лучше отоптимизировать, поэтому они могут работать чуть быстрее(адреса данных заранее известны).
Только при выполнении встраиваимых функций-членов. И то - не всегда, не каждый компилятор и не на каждой платформе.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 21:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016