Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

Оптимизация. static объекты - C++

29.01.2012, 21:12. Просмотров 938. Ответов 3
Метки нет (Все метки)

Страуструп написал такую функцию для его книги "принципы и практика использования C++":
( обратите внимание на массив SuffixMap )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Suffix::Encoding get_encoding(const string& s)
{
    struct SuffixMap 
    { 
        const char*      extension;
        Suffix::Encoding suffix;
    };
 
    static SuffixMap smap[] = {
        {".jpg",  Suffix::jpg},
        {".jpeg", Suffix::jpg},
        {".gif",  Suffix::gif},
    };
 
    for (int i = 0, n = ARRAY_SIZE(smap); i < n; i++)
    {
        int len = strlen(smap[i].extension);
 
        if (s.length() >= len && s.substr(s.length()-len, len) == smap[i].extension)
            return smap[i].suffix;
    }
 
    return Suffix::none;
}
В этой функции создается массив static SuffixMap smap[].
Почему он статический? Потому что большой и чтобы его каждый раз не создавать его сделали статическим?
Вообще когда надо делать большие неизменяемые( как этот ) объекты статическими?
Если мы знаем, что функция вызывается много раз, то тут вроде как понятно, что надо сделать объект статическим. Но ведь не всегда известно сколько раз будет вызываться функция.
Это ведь эквивалентно выделить память и не освобождать ее до конца выполнения программа. Только массив находится в статической памяти, а выделенная память в куче. Но все равно в итоге и в той и в другой памяти это занимает место.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2012, 21:12     Оптимизация. static объекты
Посмотрите здесь:

Private: static C++
C++ static-член
Опять static C++
C++ static const
C++ static и const
C++ Назначение static ?
C++ static class
C++ static const?
Static Library C++
Static C++
Static переменные C++
Static class c++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,113
29.01.2012, 21:28     Оптимизация. static объекты #2
Цитата Сообщение от Chelioss Посмотреть сообщение
Это ведь эквивалентно выделить память и не освобождать ее до конца выполнения программа. Только массив находится в статической памяти, а выделенная память в куче. Но все равно в итоге и в той и в другой памяти это занимает место.
А теперь угадай, где хранились бы данные, которыми инициализировался бы массив, если бы он не был статическим.
Всегда, когда у тебя есть сколько-то большие заведомо неизменяемые объекты, лучше сделать их статическими.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
29.01.2012, 21:37  [ТС]     Оптимизация. static объекты #3
Цитата Сообщение от NoMasters Посмотреть сообщение
А теперь угадай, где хранились бы данные, которыми инициализировался бы массив, если бы он не был статическим.
Т.е. строки, которые находятся в статической памяти, копировались бы в стекувую память без static? А со static копирования не было бы что ли?

Возник вопрос про статическую память. Этот массив записывается в статическую память во время выполнения программы, когда выполняется эта строка(10 в листинге в первом посте)
или во время компиляции? Вот строки "" заноясятся сразу во время компиляции.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,113
29.01.2012, 21:43     Оптимизация. static объекты #4
Цитата Сообщение от Chelioss Посмотреть сообщение
Т.е. строки, которые находятся в статической памяти, копировались бы в стекувую память без static?
Нет, строки никуда не копировались бы, только массив структур SuffixMap, где на них есть указатели. Вся статическая память формируется во время компиляции.
Yandex
Объявления
29.01.2012, 21:43     Оптимизация. static объекты
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru