|
|
  |
Динамически создаваемые объекты классов, Принцип работы |
|
|
|
Jun 17 2010, 05:10
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
В одном из проектов не нашел ничего более удобного как использование динамически создаваемых классов. Создаваться они будут один раз при запуске и в процессе работы удаляться и пересоздаваться не будут. Какие именно классы будут создаваться и использоваться будет задаваться проектом!!! При запуске, я буду считывать из проекта необходимые данные и в зависимости от них буду создавать те или иные классы, причем возможны и несколько объектов одного класса.
На PC, в моем представлении, объект класса создается в оперативной памяти, однако в ARM оперативная память используется для хранения данных, а собственно исполняемый код находится во флэш, и естественно ничего динамически там создать нельзя. Можно ли использовать динамически создаваемые объекты на ARM и как они в этом случае работают!?
P.S. На всякий случай уточню, что программа пишется под LPC2366 (ARM7)
|
|
|
|
|
Jun 17 2010, 06:28
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Цитата(sergeeff @ Jun 17 2010, 09:04)  Для уяснения этого вопроса абстрагируйтесь от классов. Считайте, что это просто объект, такой же как int. Теперь знаете ответ на свой вопрос? Нет не знаю. Динамический int выделяет память в оперативной памяти, а вся работа ведется через указатель. В случае же с классом, помимо данных есть методы, которые не могут быть расположены в памяти, а следовательно они должны всегда присутствовать во флеше, не зависимо от того использую я их или весь класс или нет. Если это так, то в эти функции как-то неявно должен передаваться указатель на динамически созданные данные в памяти. Это моя модель, а как на самом деле я и пытаюсь понять!!!
|
|
|
|
|
Jun 17 2010, 07:01
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Удалены будут только те методы, которые вообще нигде в программе не используются, я же имел в виду, что методы будут располагаться в памяти флэша, даже если я не создал динамически объект класса, в котором они используются  ) Раз уж описанная мной методика верна, то, интересно, насколько она замедляет работу по сравнению с обычными объектами, созданными статически. Есть статистика?
|
|
|
|
|
Jun 17 2010, 12:52
|

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

|
Цитата(Yaumen @ Jun 17 2010, 10:01)  Удалены будут только те методы, которые вообще нигде в программе не используются, я же имел в виду, что методы будут располагаться в памяти флэша, даже если я не создал динамически объект класса, в котором они используются  ) Если во всей вашей программе нет ни одного создания объекта какого-то класса (неважно - автоматически (на стеке, локально), статически (глобально) или динамически (через оператор new()), и нет ни одного обращения к функциям-членам (например, через приведенный указатель), то весь код этого класса будет выкинут. Если объект создается или есть обращения через приведенный указатель, но нет ни одного обращения к невиртуальной функции-члену, то код этой функции-члена будет выкинут. Цитата(baralgin @ Jun 17 2010, 11:11)  Статические объекты компилятор сможет лучше отоптимизировать, поэтому они могут работать чуть быстрее(адреса данных заранее известны). Только при выполнении встраиваимых функций-членов. И то - не всегда, не каждый компилятор и не на каждой платформе.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|