Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статические члены и наследование 
:(
    Опции темы
mes
Дата 28.8.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



...

Это сообщение отредактировал(а) mes - 28.8.2008, 16:46


--------------------
PM MAIL WWW   Вверх
Anton Vatchenko
Дата 28.8.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Вот о скорости... Пример последний - это вызов функции isVisible. Будет ли эффективно, если мне нужно обработать 1 млн объектов, в цикле вызывать эту функцию? Может конечно сделать inline, но вот интересно к какому виду это приведет интерпретатор (как кто-то тут говорил "С++ код все равно приводится к Си")...


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 28.8.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Anton Vatchenko @  28.8.2008,  16:51 Найти цитируемый пост)
Вот о скорости... Пример последний - это вызов функции isVisible. Будет ли эффективно, если мне нужно обработать 1 млн объектов, в цикле вызывать эту функцию? 

да, будет, так как все это дело соптимизируется


хотя тут особо оптимизироваться нечему... возврат значения...

Добавлено через 2 минуты
кстати, почему бы тебе самому не попробовать сравнить?

Это сообщение отредактировал(а) Alek86 - 28.8.2008, 16:55


--------------------
user posted image    user posted image
PM MAIL   Вверх
Anton Vatchenko
Дата 28.8.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Сравнивал... Обычный цикл работает на 10% медленнее с этим isVisible что с inline что без. А вот взятие значения из памяти быстрее...


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



И как ты сравнивал?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Anton Vatchenko
Дата 28.8.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Код

#include <stdio.h>
#include <windows.h>

int a[10000000];
int n = 10000000;

inline int get(int i) {
    return a[i];
}

void main() {
    DWORD sum = 0;
    for(int j = 0; j < 100; j++) {
        int cnt = 0;
        DWORD t = GetTickCount();
        for(int i = 0; i < n; i++) {
            if(get(i) < 1000)
                cnt++;
        }
        printf("%d %d\n", cnt, sum += (GetTickCount() - t));
    }
}


Вот код... Если get(i) заменить на a[i], то работает за 3 секунды. А в приведенном варианте 63 секунды. Это если голый пример (у меня разница на 10%, а тут раз в 20).


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Если выставить сборку Release в студии и установить Optimization: Maximize Speed (/O2), то оба варианта имеют одинаковое время исполнения.

Посмотрел ассемблерный листинг. В обоих случаях выходит один и тот же машинный код. 

Это сообщение отредактировал(а) W4FhLF - 28.8.2008, 17:42


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
mes
Дата 28.8.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250




Цитата(Anton Vatchenko @  28.8.2008,  17:30 Найти цитируемый пост)
Вот код... Если get(i) заменить на a[i], то работает за 3 секунды. А в приведенном варианте 63 секунды. 


с включенной оптимизацией результат в обоих случаях 2578 тиков
5719 с прямым доступом  и 9063 через get()

итог > разрешите компилятору соптимизировать вместо того чтоб мучиться самому  smile 



--------------------
PM MAIL WWW   Вверх
Anton Vatchenko
Дата 28.8.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Ну не все же пишут в виндовсе...


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.8.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Anton Vatchenko, ну твой то код определённо под винду smile И это не от оперционки зависит, а от компилятора и умения его настроить. Если есть желание писать вместо кода кашу и делать monkeyjob за компилятор, то это личное дело каждого. Просто это глупо smile 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
vinter
Дата 28.8.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



За что люблю Сишников, вооружатся стандартом  и умными книжками и с рвением святой инквизиции доказывают всем мнение чужого дядьки  smile 
public перменные маст хэв, не надо от них чуратся как от прокаженных. Если надо, значит юзай.
Кстати очень интересная позиция замены паблик переменных сетами и гетами, если есть сеты и геты для переменной то это уже нарушение инкапсуляции, так что тут не важно как это выглядит, через методы, либо напрямую. Все одно. Правда напрямую меньше букофф, так что выбирать надо то, что удобно, а не то, что дядьки чужие насоветовали smile В конце концов программирование это искусство, а не писание по шаблонам.


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 28.8.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
public перменные маст хэв, не надо от них чуратся как от прокаженных. Если надо, значит юзай.

конечно да, если только программист отдает себе отчет, зачем он этои делает..
если он не понимает разницы между публичной и приватной переменной, то лучше пусть делает приватной .. Так хоть через некоторое время накопится опыт и придет осознание. То же касается и Гетеров. Начинать инкапсуляцию можно начинать с них, остальное  с опытом.. главное стремится. 
Кажется если спрятать реализацию, это усложняняет разработку программы. Да действительно для локальной области все это добавляет затруднений. Однако если смотреть на прогу со стороны- то программа разработаная с учетом приватной реализации собрана из кубиков - где каждый отдельный кубик можно протестировать, и расширить ему функциональность. Программа же с открытой реализацией похожа на кашу, где все переплетено и выделить оттуда определенную сушность очень трудно даже для понимания, не говоря о поддержки и расширеннии функциональности..

Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
Правда напрямую меньше букофф, так что выбирать надо то, что удобно, а не то, что дядьки чужие насоветовали  В конце концов программирование это искусство, а не писание по шаблонам. 

Но чтоб преуспеть в искустве надо слушать, что эти чужие дядьки советуют, анализировать, пробавать, понимать и в конце концов принимать решение уже своей головой в каждом конкретном случае


--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 29.8.2008, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
Кстати очень интересная позиция замены паблик переменных сетами и гетами, если есть сеты и геты для переменной то это уже нарушение инкапсуляции


Хм... Где здесь нарушение? Разве взаимодействие с интерфейсом считается нарушением инкапсуляции? 





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
vinter
Дата 29.8.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(W4FhLF @  29.8.2008,  07:52 Найти цитируемый пост)
Хм... Где здесь нарушение? 

ты открыл доступ к внутреннему состоянию, интерфейс\напрямую не важно, важно то, что пользователь получает доступ. А это нарушение.


--------------------
Мой блог
PM MAIL WWW   Вверх
Ches
Дата 29.8.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 19.8.2008

Репутация: нет
Всего: 3



Цитата(mes @  28.8.2008,  19:41 Найти цитируемый пост)
если он не понимает разницы между публичной и приватной переменной, то лучше пусть делает приватной 

то пусть почитает еще книжек, потому как  инкапсуляция - часть фундамнтальной основы ООП.

Цитата(vinter @  28.8.2008,  19:21 Найти цитируемый пост)
выбирать надо то, что удобно

Цитата(vinter @  29.8.2008,  08:53 Найти цитируемый пост)
крыл доступ к внутреннему состоянию, интерфейс\напрямую не важно, важно то, что пользователь получает доступ. А это нарушение.

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


PM MAIL ICQ   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.