powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Принципный вопрос - оптимизации и переменные.
12 сообщений из 12, страница 1 из 1
Принципный вопрос - оптимизации и переменные.
    #34949050
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C++ Builder. Сперва код :
Код: plaintext
1.
2.
3.
4.
5.
6.
for(int ctr= 0 ; ctr < DBGrid->Columns->Count; ctr++)
	{
	TColumn *Col = DBGrid->Columns->Items[ctr];
	if(Col->Field->FieldName.AnsiCompareIC(ShipmentNameField) ==  0 )
		Col->ButtonStyle = cbsEllipsis;
	}

Фокус специально на етом ряду
TColumn *Col = DBGrid->Columns->Items[ctr];

Вопрос : в КАЖДОЙ интерации ли создается переменная-указатель Col ?

Рассуждения: Если НЕ в каждой, тогда в новом цикле стойность Col будет остатачная ( перед присвоением) с указателем на старую стойность. А если в каждам ... ето не трата ли времени создавать и уничтожать каждый раз ету переменливую ? Не лучше ли перед циклом декларировать ?


И вообще, где можно почитать про оптимизатор Борландa ?
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949118
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TPAKTOPA Рассуждения: Если НЕ в каждой, тогда в новом цикле стойность Col будет остатачная ( перед присвоением) с указателем на старую стойность.
Это не должно волновать, т.к. неинициализированные данные имеют полное право совпадать с предыдущим значением
TPAKTOPAА если в каждам ... ето не трата ли времени создавать и уничтожать каждый раз ету переменливую ?
Вполне возможно, что компилятор будет каждый раз прыгать по стеку, не такие уж и великие затраты...
TPAKTOPAНе лучше ли перед циклом декларировать ?
Можно и перед циклом, но тогда увеличится ее область видимости. Код будет менее понятен и благоволить для ошибок. МОжно конечно, поступить так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
{
    TColumn *Col;
    for(int ctr= 0 ; ctr < DBGrid->Columns->Count; ctr++)
	{
	Col = DBGrid->Columns->Items[ctr];
	if(Col->Field->FieldName.AnsiCompareIC(ShipmentNameField) ==  0 )
		Col->ButtonStyle = cbsEllipsis;
        }
}

Но стоит ли терять читабельность кода ради сомнительной оптимизации.

Сначала советую провести тест, критично ли это преобразование, и только после него (а он, скорее всего покажет что значения никакого подобная оптимизация не имеет) делать выводы.
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949129
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практическая оптимизация - не так и волнует, ето не отнимает много времени. В конкретном случае.
Но не впервой с подобной декларацией сталкиваюсь ... и каждый раз мне кажется , что ето - неправильно - в цикле декларировать переменную.

Не знаю, остатки паскаля, или чего, но думается что правильно - перед циклом. Если ТОЛЬКО ОДИН раз переменная создается - в первом входе в блок цикла, то ничего. А если каждый раз, то уже ... некрасиво.
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949155
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TPAKTOPA Не знаю, остатки паскаля, или чего, но думается что правильно - перед циклом. Если ТОЛЬКО ОДИН раз переменная создается - в первом входе в блок цикла, то ничего. А если каждый раз, то уже ... некрасиво.

Есть правило стиля С++ (в отличии от Си) - декларировать переменную там, где она используется. Есть приверженцы этого стиля и есть те, кому он не нравиться. Некоторые декларируют все переменные в начале функции, им так читабельней и оптимальней.

Это риторический вопрос и однозначного ответа на него нет.
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949189
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читабельность - да. Но меня больше интересует скорость и оптимизация, чем читабельность. Особенно, если переменная - ето не указатель, а примерно класс с конструкторами . Уже может влиять и на скорость программы.

Сделал маленькую тест - програмку - переменная создается ТОЛЬКО раз - при вход в блок цикла. И на каждую интерацию пользуется та же самая. Так что скорость - одна и та же, независимо где декларируется переменная.

А так как переменная пользуется только е етом блоке, то лучше ее декларировать в нем.
Можно сказать - вопрос снят.
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949211
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
#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 ;
};

...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949214
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949220
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TPAKTOPA T> Рассуждения: Если НЕ в каждой, тогда в новом цикле
T> стойность Col будет остатачная ( перед присвоением) с
T> указателем на старую стойностьВ любом варианте реализации, я бы не стал закладываться на это.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949339
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Akh Что-то почти такое попробовал :)

Карабас БарабасПеременная создается на стеке в начале выполнения функции (по крайней мере, так было в билдере 5).

Видно, ето так. А от куда ты ето знаеш ? Где ето можно прочитать ( и не только ето).
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949427
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TPAKTOPAА от куда ты ето знаеш ?Смотрел ассемблерный код когда-то :) Можно включить где-то в опциях компилятора "генерировать ассемблерный код", а можно точку останова поставить и зайти отладчиком.
TPAKTOPAГде ето можно прочитать ( и не только ето). честно говоря, не знаю. Можно поискать статьи в инете по борландовскому компилятору. Точно были статьи про сравнение разных компиляторов, там было немного информации о том, какой они генерят код.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949474
Leshij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Принципный вопрос - оптимизации и переменные.
    #34949694
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeshijИ что этот тест должен был показать? Что вызов конструктора (а не
выделение памяти под объект) происходит на каждом витке цикла?
Posted via ActualForum NNTP Server 1.4

Если научиться читать вниматольно, то можну увидеть, что этот тест должен показать, что переменная создается каждый раз при новой итерации цикла.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Принципный вопрос - оптимизации и переменные.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]