![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
varnie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: 0 Всего: 0 |
здравствуйте.
имеется класс для эмулирования работы со стеком:
хочется оптимизировать по времени исполения. интересно то, что закомменченный вариант номер 2, в котором при кажд. увеличении стека запоминается указатель на его вершину для того, чтобы при многочисленных CStack::setValue, CStack::getValue нам не приходилось каждый раз обращаться к _data.top(), работает медленнее. от чего такое может быть?? или же это и есть случай преждевременной оптимизации, которая есть зло? если есть другой подход к решению проблемы -- был бы рад о нем услышать. спасибо. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
varnie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: 0 Всего: 0 |
||||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Вопрос ещё в силе? Какой из вариантов работает медленнее?
|
|||
|
||||
varnie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: 0 Всего: 0 |
JackYF, в силе!
медленнее работает незакомменченный вариант. если можно в корне как-то по-другому разрулить эту проблему -- я буду рад любой реализации. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Тогда давай подробнее, а, собственно, на каких функциях и в каком порядке он работает медленее? |
|||
|
||||
varnie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: 0 Всего: 0 |
JackYF,
ну вот есть у меня эта реализация стека. при кажд. заходе в некоторый блок (а-ля эмуляция вызова функции) мы делаем stack::push, далее отрабатывает этот блок, использующий в десятках своих мест stack::getValue и stack::setValue. причем, stack::setValue вызывается всего неск раз (для того чтобы занести нек. параметры в стек), а stack::getValue вызывается в разы больше (для многочисленных получений значений параметров из текущего стека). ну вот. а по выходу из этого обрабатываемого блока мы делаем stack::pop. именно поэтому я и прикинул, что по-идее быстрее будет если мы при кажд увеличении/уменьшении стека будем запоминать указатель на его верхушку, а далее в getValue/setValue работать с стеком через этот указатель. но что-то эту скорость я неособо вижу) точнее, вообще не вижу. как вариант, была мысль раскручивать стек и освобождать память только один раз, в деструкторе моего стэка, но это не применимо в том случае, если наш т.н. блок действий будет исполняться бесконечно и многократно вызывать др блоки (следовательно, вызывается Stack::push и мы быстро сожрем всю память, не возвращая ее после кажд выхода из блока, что не есть хорошо). |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
т.е Вы считаете что замена _data.top() на _pTop даст значительный прирост в скорости ? В релизе при включенной оптимизации компилятор и так автоматически выкидывает все такие лишние вызовы.. Раз 20 прочитал что Вы написали, но полного смысла не уловил, чего Вы пытаетесь добиться |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
с памятью работать не так надо, лдя скорости... почитайте про quickheap на rsdn.ru ...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |