Няшная / Говнокод #4866 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
ZEB_CALLBACK ZEB_CACHE_GetPage(ZEB_PagesCache *pPagesCache, ZEB_PAGEIDX fpPageIndex, void **ppCachedPageAdress)
{  
  ZEB_WORD i; 
  for(i = 0; i < pPagesCache->loadedCount; i++)
  {
    if(pPagesCache->pDescriptors[i].fpPosition == fpPageIndex)
    {
      pPagesCache->pDescriptors[i].hitPoints++;
      (*ppCachedPageAdress)=(pPagesCache->pCache)+(i<<(pPagesCache->pageRatio)); //выдаю адрес подгруженной страницы в кэше
      return ZEBCB_GOOD;
    }
  }
  // запрошенная страница все еще не найдена} 
  //если страницы нету - то проверяем - есть ли свободный слот, а если нет слotа, то проводим операцию по выпиливанию страницы с наименьшим ХП 
  if( pPagesCache->loadedCount < pPagesCache->capacity )
  {//если слот еще есть то загружаем в позицию края - это loadedCount и увеличиваем его на 1
    pPagesCache->pDescriptors[pPagesCache->loadedCount].fpPosition = fpPageIndex; //указываем реальный адрес в соусе
    pPagesCache->pDescriptors[pPagesCache->loadedCount].hitPoints = 1;  //ХП ставим в 1
    ZEB_CACHE_MechMountPage(pPagesCache,pPagesCache->loadedCount,fpPageIndex);//загружаем эту страницу в кэш (позиция соответствует индексу дескриптора) 
    (*ppCachedPageAdress)=(pPagesCache->pCache) + ((pPagesCache->loadedCount) << (pPagesCache->pageRatio)); //получаем адрес страницы  
    pPagesCache->loadedCount++; //увеличиваем количество загруженных страниц  
    return ZEBCB_GOOD;
  }else //TODO: елсе не нужен     // Почему не нужен? (2010 07 12)    //Не знаю (2010 07 28)
  {//если свободных слотов нет - то проводим поиск наименьшего хп и выпиливаем его, загружая на его место новый дескриптор и страницу
    //поиск наименбшего хп
    ZEB_WORD 
     register minHP,
     register minDIDX  //Descriptor InDeX
     ;    
    minHP = pPagesCache->pDescriptors[0].hitPoints;
    minDIDX = 0;
    for(i = 1; i < pPagesCache->capacity; i++)
    {
      if(pPagesCache->pDescriptors[i].hitPoints < minHP)
      {
        minHP = pPagesCache->pDescriptors[i].hitPoints;
        minDIDX = i;
      }
    }
    //страница в любос случае найдена - выпиливаем ее - сохраняя ее в сурс обратно
    ZEB_CACHE_MechUnmountPage(pPagesCache,minDIDX,pPagesCache->pDescriptors[minDIDX].fpPosition); 
    //и на ее место грузим новый дескриптор и саму страницу
    pPagesCache->pDescriptors[minDIDX].fpPosition = fpPageIndex; //указываем реальный адрес в соусе   //TODO: Нужно запихивать дескрипторы в отдельный массив и обращаться по указателю, потом это дело можно сортировать для ускорения поиска страниц. Режимы сортировок - максимум и минимум: 1 - для быстрого обращения к наиболее часто используемым страницам, 2 - для быстрого выпиливания менее используемых страниц. (2010 07 28)
    pPagesCache->pDescriptors[minDIDX].hitPoints = 1;  //ХП ставим в 1 
    //кэшируем требуемую страницу
    ZEB_CACHE_MechMountPage(pPagesCache,minDIDX,fpPageIndex);    
    (*ppCachedPageAdress)=(pPagesCache->pCache) + ((pPagesCache->loadedCount) << (pPagesCache->pageRatio)); //получаем адрес страницы  
    return ZEBCB_GOOD;
  }
}

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

Запостил: CreatorOfBullshit CreatorOfBullshit, (Updated )

Комментарии (5) RSS

  • Вот это понравилось:
    //TODO: елсе не нужен // Почему не нужен? (2010 07 12) //Не знаю (2010 07 28)
    Ответить
  • говно. в кэше переиспользуется слот с самой мало используемой страницей. это даже не традиционный LRU. например только что положеная в кэш страница может быть выкинута уже следующим же вызовом - в то время как страница показаная пару раз день назад будет сидеть.

    http://en.wikipedia.org/wiki/Cache_algorithms#Random_Replacement - даже это будет иметь более высокую производительность в большинстве сценарием. по крайней мере отсутсвуют явные кривости, которые может демонстрировать в реальной жизне вышеприведенный алгоритм.
    Ответить
  • >Код кодил ОП.
    Код постил кеп.
    if( <...>)
      {
    <blah-blah-blah   >
    return <some_shit>;
      }else 
    
    //TODO: елсе не нужен     // Почему не нужен? (2010 07 12)    //Не знаю (2010 07 28)

    Но замечу, нынче на гк такой смешной говнотреш редко попадается.
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8