Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Создание, объявление объектов
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Omen Omen вне форума
Member
 
Сообщений: 467
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.05.2004
По умолчанию Создание, объявление объектов - 28.01.2005, 22:31

Простой тест.

Код:
#include <time.h>

void f1()
{
    static int k;
    k++;
}

void f2()
{
    int i1;
    int i2;
    int i3;
    int i4;
    int i5;
    int i6;

    static int k;
    k++;
}

void f3()
{
    int i1;
    int i2;
    int i3;
    int i4;
    int i5;
    int i6;

    i1=1;i2=2;i3=3;i4=4;i5=5;i6=6;
    
    static int m;
    m++;
}

void main()
{
    
    clock_t c1,c2;
    int max=99999999;
    
    c1=clock();
    for (int i=0;i < max;i++) f1();    
    c2=clock();  
    printf("f1(): %ld calls per %.1f secn",max,double(c2-c1)/CLK_TCK);
 
    c1=clock();    
    for (i=0;i < max;i++) f2();    
    c2=clock();
    printf("f2(): %ld calls per %.1f secn",max,double(c2-c1)/CLK_TCK);

    c1=clock();    
    for (i=0;i < max;i++) f3();    
    c2=clock();
    printf("f3(): %ld calls per %.1f secn",max,double(c2-c1)/CLK_TCK);
}
У меня результаты такие:
f1- 3.2 сек.
f2- 3.5 сек.
f3- 3.7 сек.

Какого черта? Страуструп ясно написал, что объект создается во время его опредления, а не объявления! Этим объясняется различие между второй и третьей функциями, а как же первая? По идеи она должна быть одинакова со второй. Почему нет? Статику я вставил для отвода глаз компилятора, чтобы не вздумал выкидывать функции. Компилер - MSVC++6.0.
Ответить с цитированием
  (#2 (permalink)) Старый
Omen Omen вне форума
Member
 
Сообщений: 467
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.05.2004
По умолчанию 29.01.2005, 14:26

А вот почему. Только extern является явным указанием, что это лишь объявление, а не определение. Объявив так все переменные во второй ф-ии ее время выполнения совпало с первой.
Ответить с цитированием
  (#3 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 29.01.2005, 21:34

Во-первых, объявление и определение в твоем коде - это одно и то же. При всем уважении к Страуструпу, еще существует Стандарт, 3.1 clause 2.
Во-вторых: Оптимизацию в эксперименте отключить не забыл?
Цитата:
Originally posted by MSVC++ 7.1+ Celeron 2.4, 512 DDR-->
Цитата:
// оптимизация включена
f1(): 1000000000 calls per 4.2 sec
f2(): 1000000000 calls per 4.2 sec
f3(): 1000000000 calls per 4.3 sec
(разброс в 0.1 сек - в пределах точности эксперимента)

// оптимизация выключена
f1(): 1000000000 calls per 6.0 sec
f2(): 1000000000 calls per 5.9 sec
// выполняется i1=1;i2=2;i3=3;i4=4;i5=5;i6=6;
f3(): 1000000000 calls per 8.4 sec
В-третьих: Для правильного эксперимента нужно использовать не int, а класс с нетривиальным конструктором/деструктором. Хотя бы такой:
Код:
class Int
{
    int i;
public:
    Int(): i(0) {};
    Int(int ii): i(ii) {};
    Int(const Int& ii): i(ii.i) {};
    Int& operator=(const Int& ii)
    { if (&ii != this) i = ii.i; return *this; }
    Int& operator=(int ii)
    { i = ii; return *this; }
    operator int() { return i; }
    ~Int() {};
};
<!--QuoteBegin-MSVC++ 7.1
@ Celeron 2.4, 512 DDR
[b]// оптимизация выключена
f1(): 1000000000 calls per 5.9 sec
f2(): 1000000000 calls per 8.4 sec
f3(): 1000000000 calls per 12.7 sec
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание объектов внутри if tiger() Visual C++ 15 07.05.2011 17:21
Создание объектов класса с помощью встроенного мастера Niflheimr Visual C++ 1 05.10.2008 01:30
Создание трехмерных объектов на карте Lexus82 Вопросы начинающих программистов 1 24.11.2006 15:02
Динамическое создание объектов a-e-voronov Visual C++ 4 14.05.2006 01:09
Как можно реализовать создание объектов BabyBear Visual C++ 1 05.05.2006 05:23
Создание объектов на форме ГС ТОФ Delphi 6 07.01.2006 10:28
Динамическое создание объектов CheckBox antonio85 C++ Builder 2 12.05.2005 15:35
Динамическое создание объектов Novichok Delphi 3 28.03.2005 20:16
Создание VCL объектов во время исполнения LaMiK C++ Builder 3 13.05.2004 18:53
Создание движущихся объектов omygut Visual C++ 1 11.05.2004 10:38
Динамическое создание объектов se7en Delphi 10 12.04.2004 20:18
Создание объектов выбором из палитры Anonymous C++ Builder 2 08.10.2003 17:19



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов