Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Динамически создаваемые объекты классов
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Yaumen
В одном из проектов не нашел ничего более удобного как использование динамически создаваемых классов. Создаваться они будут один раз при запуске и в процессе работы удаляться и пересоздаваться не будут. Какие именно классы будут создаваться и использоваться будет задаваться проектом!!! При запуске, я буду считывать из проекта необходимые данные и в зависимости от них буду создавать те или иные классы, причем возможны и несколько объектов одного класса.

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

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

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

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

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

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

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