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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
#1

Кэш.Функции - C++

25.12.2010, 18:58. Просмотров 2209. Ответов 6
Метки нет (Все метки)

Многократно вызываемая функция может запоминать результаты последнего вычисления и если то что требуется она уже делала - то не пересчитывать еще раз, а выдать из ранее посчитанного? Это означает кэширование в программировании? Мне просто надо сделать задачу о числах Фибоначи через функцию с кэшированием.Можете привести пример таких функций? Как сделать числа Фибоначи рекурсивно я знаю, а вот с этим кэшированием не понимаю. Приведите, пожалуйста, примеры таких функций и, если можно с объяснением. СПАСИБО!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2010, 18:58     Кэш.Функции
Посмотрите здесь:

кэш процессора - C++
Народ, помогите пожалуйста с такой вещью. Нужно получить информацию о кэше процессора. Были тщетные попытки использовать...

CppWebBrowser и кэш - C++ Builder
Здраствуйте! Интересует вопрос, как имея CppWebBrowser сохранять/загружать кэш и куки не туда/оттуда, где хранятся по умолчанию кэш и...

C++ Кэш процессора (__cpuid) - C++
Нужно получить кэш процессора. Сумму L1, L2, L3 или по отдельности - не важно. Нашёл решение для L2, но метод тыка для L1 и L3 не...

Добавление данных в кэш - C++
Здравствуйте. Есть ли какие-то средства (связанные непосредственно с плюсами или нет), позволяющие влиять на добавление данных в кэш. В...

Как работает кэш? - C++
Здравствуйте! Хочу понять как работает кэш. Задание такое: Нам надо нарисовать желтый квадрат на белом листе, для этого нам надо...

Приоритет программы и кэш-память - C++
Всем привет! Подскажите пожалуйста, есть ли способы в коде программы установить ее приоритет? А также очень интересует - можно ли...

Динамические массивы и кэш процессора - C++
Добрый вечер! У меня следующий вопрос: ниже представленный код выдает ошибку, как-бы нет доступа к памяти, IDE вижел 2011, главная суть...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
27.12.2010, 01:04     Кэш.Функции #2
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <locale.h>
#include <list>
 
class CResult //класс результата m_result = m_a + m_b;
{
private:
    int m_a;
    int m_b;
    int m_result;
 
public:
    CResult(int _a, int _b, int _result)
    {
        m_a = _a;
        m_b = _b;
        m_result = _result;
    }
    bool IsReady(int _a, int _b) const
    {
        return ((m_a == _a) && (m_b == _b));
    }
    int GetResult() const
    {
        return m_result;
    }
};
 
int GetComplexCalculation(int _a, int _b)
{
    #define DCashMaxSize 100
    static std::list<CResult> cash;
    for(std::list<CResult>::iterator iter = cash.begin(); iter != cash.end(); iter++)
    {
        if (iter->IsReady(_a,_b))
        {
            printf("найдено в кеше (a=%d,b=%d,r=%d);\r\n", _a,_b,iter->GetResult());
            return iter->GetResult();
        }
    }
 
    printf("вычисляем (%d + %d); ", _a, _b);
    int result = _a + _b;
 
    printf("добавляем в кеш (%d,%d,%d);\r\n", _a, _b, result);
    if (cash.size() == DCashMaxSize)
        cash.pop_front();
    cash.push_back(CResult(_a, _b, result));
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    for(int i = 0; i < 4; i++)
        for(int j = 0; j < 4; j++)
            printf("вычисляем %d+%d=%d\r\n",i,j,GetComplexCalculation(i,j));
    for(int i = 0; i < 4; i++)
        for(int j = 0; j < 4; j++)
            printf("вычисляем %d+%d=%d\r\n",i,j,GetComplexCalculation(i,j));
    return 0;
}
Работает, если кеш не переполняется..
ForEveR
27.12.2010, 10:44
  #3

Не по теме:

EVP, Ух... Зачем же так мешать С и С++?

KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
27.12.2010, 17:30  [ТС]     Кэш.Функции #4
EVP, Эм... Я в этом коде ничего вообще не понял?!
Kami-sama
Заблокирован
27.12.2010, 18:36     Кэш.Функции #5
Это означает кэширование в программировании?
Нет.
В настоящих языках программирования самое близкое понятие — мемоизация.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
27.12.2010, 18:59     Кэш.Функции #6
Если попроще, то
C++
1
2
3
4
5
6
7
unsigned fib(unsigned n)
{
    static std::vector<unsigned> c;
    if (n >= c.size())
        c.resize(n + 1);
    return n <= 1 ? n : c[n] != 0 ? c[n] : c[n] = fib(n - 1) + fib(n - 2);
}
Если в c ещё нет числа, то оно считается и пишется туда, если есть - берётся оттуда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 19:10     Кэш.Функции
Еще ссылки по теме:

Буфер, ОЗУ, кэш, регистр процессора - C++
Добрый день! Часто задаю вопросы на форуме в процессе изучения C/C++ и вот. Начал читать про трудности использования getchar() ...

Увеличение производительности за счет кэш-памяти и конвейерности процессора - C++
Читаю тут одну книгу и не понимаю. Перемножают матрицы. И говорят. Ну вот, если будем перемножать как обычно большие матрицы С=AB, то...

Не чистится кэш - Joomla
Приветствую Возника проблема с кэшем... Использую шаблон в котором встроен Gantry, в настройках есть Gantry cache - выключил, но не...

IE не сохраняет кэш - Софт
Привет всем! Поставила 8 эксплорер. После этого он перестал сохранять кэш. Каждый раз все картинки грузятся заново. Поставила 7...

Кэш эскизов - Windows 7
Привет. У меня периодически сам очищается кэш эскизов и все кэшируется заново,можно как нибудь это исправить?


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

Или воспользуйтесь поиском по форуму:
tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
20.01.2011, 19:10     Кэш.Функции #7
http://www.intuit.ru/department/pl/funcprog/19/ - а здесь видео-лекцию как раз по этой задачи найдете!))
Yandex
Объявления
20.01.2011, 19:10     Кэш.Функции
Ответ Создать тему
Опции темы

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