|
|
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
C++ Builder. Сперва код : Код: plaintext 1. 2. 3. 4. 5. 6. Фокус специально на етом ряду TColumn *Col = DBGrid->Columns->Items[ctr]; Вопрос : в КАЖДОЙ интерации ли создается переменная-указатель Col ? Рассуждения: Если НЕ в каждой, тогда в новом цикле стойность Col будет остатачная ( перед присвоением) с указателем на старую стойность. А если в каждам ... ето не трата ли времени создавать и уничтожать каждый раз ету переменливую ? Не лучше ли перед циклом декларировать ? И вообще, где можно почитать про оптимизатор Борландa ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 14:48:28 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
TPAKTOPA Рассуждения: Если НЕ в каждой, тогда в новом цикле стойность Col будет остатачная ( перед присвоением) с указателем на старую стойность. Это не должно волновать, т.к. неинициализированные данные имеют полное право совпадать с предыдущим значением TPAKTOPAА если в каждам ... ето не трата ли времени создавать и уничтожать каждый раз ету переменливую ? Вполне возможно, что компилятор будет каждый раз прыгать по стеку, не такие уж и великие затраты... TPAKTOPAНе лучше ли перед циклом декларировать ? Можно и перед циклом, но тогда увеличится ее область видимости. Код будет менее понятен и благоволить для ошибок. МОжно конечно, поступить так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Но стоит ли терять читабельность кода ради сомнительной оптимизации. Сначала советую провести тест, критично ли это преобразование, и только после него (а он, скорее всего покажет что значения никакого подобная оптимизация не имеет) делать выводы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:02:05 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
Практическая оптимизация - не так и волнует, ето не отнимает много времени. В конкретном случае. Но не впервой с подобной декларацией сталкиваюсь ... и каждый раз мне кажется , что ето - неправильно - в цикле декларировать переменную. Не знаю, остатки паскаля, или чего, но думается что правильно - перед циклом. Если ТОЛЬКО ОДИН раз переменная создается - в первом входе в блок цикла, то ничего. А если каждый раз, то уже ... некрасиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:05:39 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
TPAKTOPA Не знаю, остатки паскаля, или чего, но думается что правильно - перед циклом. Если ТОЛЬКО ОДИН раз переменная создается - в первом входе в блок цикла, то ничего. А если каждый раз, то уже ... некрасиво. Есть правило стиля С++ (в отличии от Си) - декларировать переменную там, где она используется. Есть приверженцы этого стиля и есть те, кому он не нравиться. Некоторые декларируют все переменные в начале функции, им так читабельней и оптимальней. Это риторический вопрос и однозначного ответа на него нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:11:09 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
Читабельность - да. Но меня больше интересует скорость и оптимизация, чем читабельность. Особенно, если переменная - ето не указатель, а примерно класс с конструкторами . Уже может влиять и на скорость программы. Сделал маленькую тест - програмку - переменная создается ТОЛЬКО раз - при вход в блок цикла. И на каждую интерацию пользуется та же самая. Так что скорость - одна и та же, независимо где декларируется переменная. А так как переменная пользуется только е етом блоке, то лучше ее декларировать в нем. Можно сказать - вопрос снят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:20:53 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
TPAKTOPAЧитабельность - да. Но меня больше интересует скорость и оптимизация, чем читабельность. Особенно, если переменная - ето не указатель, а примерно класс с конструкторами . Уже может влиять и на скорость программы. Сделал маленькую тест - програмку - переменная создается ТОЛЬКО раз - при вход в блок цикла. И на каждую интерацию пользуется та же самая. Так что скорость - одна и та же, независимо где декларируется переменная. А так как переменная пользуется только е етом блоке, то лучше ее декларировать в нем. Можно сказать - вопрос снят. Такой тест не пробовал? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:28:27 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
Akh A> { A> TColumn *Col; A> for(int ctr=0; ctr < DBGrid->Columns->Count; ctr++) A> { A> Col = DBGrid->Columns->Items[ctr]; A> if(Col->Field->FieldName.AnsiCompareIC(ShipmentNameField) A> == 0) Col->ButtonStyle = cbsEllipsis; A> } A> }Переменная создается на стеке в начале выполнения функции (по крайней мере, так было в билдере 5). Так что, если ничего с тех пор не поменялось, то нет никакого смысла выносить объявление переменной за цикл. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:29:09 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
TPAKTOPA T> Рассуждения: Если НЕ в каждой, тогда в новом цикле T> стойность Col будет остатачная ( перед присвоением) с T> указателем на старую стойностьВ любом варианте реализации, я бы не стал закладываться на это. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 15:30:11 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
2 Akh Что-то почти такое попробовал :) Карабас БарабасПеременная создается на стеке в начале выполнения функции (по крайней мере, так было в билдере 5). Видно, ето так. А от куда ты ето знаеш ? Где ето можно прочитать ( и не только ето). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 16:00:47 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
TPAKTOPAА от куда ты ето знаеш ?Смотрел ассемблерный код когда-то :) Можно включить где-то в опциях компилятора "генерировать ассемблерный код", а можно точку останова поставить и зайти отладчиком. TPAKTOPAГде ето можно прочитать ( и не только ето). честно говоря, не знаю. Можно поискать статьи в инете по борландовскому компилятору. Точно были статьи про сравнение разных компиляторов, там было немного информации о том, какой они генерят код. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 16:19:57 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
On Mon, 19 Nov 2007 15:28:27 +0300, Akh <nospam@sql.ru> wrote: > Такой тест не пробовал? > > #include <iostream> > using namespace std; > > class A { > public: > A(int x) { > cout << "creating A... " << x << endl; > sleep(1); > cout << "created A." << endl; > }; > > void func() { > cout << "func" << endl; > }; > }; > > > int main() { > > A a(7); > a.func(); > > for (int i=0 ; i<5 ; ++i) { > A a(i); > a.func(); > }; > > return 0; > }; И что этот тест должен был показать? Что вызов конструктора (а не выделение памяти под объект) происходит на каждом витке цикла? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 16:30:34 |
|
||
|
Принципный вопрос - оптимизации и переменные.
|
|||
|---|---|---|---|
|
#18+
LeshijИ что этот тест должен был показать? Что вызов конструктора (а не выделение памяти под объект) происходит на каждом витке цикла? Posted via ActualForum NNTP Server 1.4 Если научиться читать вниматольно, то можну увидеть, что этот тест должен показать, что переменная создается каждый раз при новой итерации цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 17:17:35 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34949214&tid=2027789]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
213ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 186ms |
| total: | 502ms |

| 0 / 0 |
