crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Создание быстродействующего распределителя памяти, для std::vector или замена глобальных операций выделения памяти
AD
  опции профиля:
сообщение 29.6.2009, 10:38
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Раньше был обычный массив (динамический), который содержал значения определенных параметров, прочитанных из лог-файла (широта, долгота, скорость и пр.). Сейчас сделал в виде вектора. Вместо оператора new теперь использую resize. Но так как эти операции чересчур затратные (а цикл может содержать и 100000 итераций (где каждый раз происходит выделение)), то стало необходимо сделать алгоритм немного по-другому.
Выделять память блоками. Т.е. вместо след. операций:
code1
t.params = new PARAMVALUE[rec_descr.size()];
t.words = new uint[rec_descr.size()];
memset(t.params, 0, sizeof(PARAMVALUE) * rec_descr.size());
memset(t.words, 0, sizeof(uint) * rec_descr.size());

Делать следующее:
code2
/// 0 <= num_block <= 1000
char *buff, *buff1;
if(num_block > 1000)
{
buff = new char[rec_descr.size() * BLOCKSIZE];
buff1 = new char[rec_descr.size() * BLOCKSIZE];
flag = false;
num_block = 0;
}
++num_block;
t.params = buff + rec_descr.size() * num_block;
t.words = buff1 + rec_descr.size() * num_block;


При замене на QVector code1 перешел в следующий:
code3
t.params.resize(rec_descr.size());
t.words.resize(rec_descr.size());


Как переписать code2 для использования в векторе QVector? Заранее благодарен за помощь....

Сообщение отредактировал AD - 30.6.2009, 15:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 29.6.2009, 13:34
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(AD @ 29.6.2009, 17:25) *
Делать выделение, когда счетчик будет более 2000?
попробуй так, да посмотри какой эффект будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Создание быстродействующего распределителя памяти   29.6.2009, 10:38
- - Tonal   Интересно, в code2 при num_block <= 1000 t.para...   29.6.2009, 10:53
|- - AD   Цитата(Tonal)Интересно, в code2 при num_block ...   29.6.2009, 11:10
- - Litkevich Yuriy   Цитата(AD @ 29.6.2009, 14:38) Выделять па...   29.6.2009, 11:36
|- - AD   Цитата(Litkevich Yuriy @ 29.6.2009, 12:36...   29.6.2009, 11:59
|- - AD   Очень прошу помочь. Как реализовать код для QVecto...   29.6.2009, 13:25
- - SABROG   Кстати интересный класс есть QVarLengthArray, если...   29.6.2009, 11:43
- - Litkevich Yuriy   Цитата(AD @ 29.6.2009, 17:25) Делать выде...   29.6.2009, 13:34
|- - AD   Цитата(Litkevich Yuriy @ 29.6.2009, 14:34...   29.6.2009, 14:05
- - Litkevich Yuriy   по ссылке, что я привёл, дочитай до конца. Там ест...   29.6.2009, 15:19
|- - AD   Юра, мне непонятна одна конкретная вещь: вот я в...   29.6.2009, 16:14
- - Litkevich Yuriy   Цитата(AD @ 29.6.2009, 20:14) Как теперь ...   29.6.2009, 17:52
|- - AD   Цитата(Litkevich Yuriy @ 29.6.2009, 18:52...   29.6.2009, 18:02
|- - BRE   AD, прости, а можешь словами рассказать, что нужно...   29.6.2009, 19:18
|- - AD   code 1, code2 из первого примера - это рабочие ко...   29.6.2009, 22:01
- - Tonal   Т.е. у тебя много маленьких векторочков. В stl у ...   30.6.2009, 7:15
|- - AD   Цитата(Tonal)Т.е. у тебя много маленьких векторочк...   30.6.2009, 8:23
|- - Tonal   Цитата(AD @ 30.6.2009, 12:23) Цитата(Tona...   30.6.2009, 10:28
|- - AD   Цитата(Tonal @ 30.6.2009, 11:28) Ничего п...   30.6.2009, 10:41
- - BRE   Как я понял задачу. Есть несколько конфигурационны...   30.6.2009, 8:45
|- - AD   Цитата(BRE @ 30.6.2009, 9:45) Как я понял...   30.6.2009, 9:03
|- - BRE   Цитата(AD @ 30.6.2009, 10:03) Есть ини-фа...   30.6.2009, 9:28
|- - AD   Цитата(BRE @ 30.6.2009, 10:28) Так может ...   30.6.2009, 9:31
- - SABROG   Цитата(Tonal @ 30.6.2009, 8:15) и сделать...   30.6.2009, 8:53
- - Tonal   Можешь написать свой, проще зацепить из буста. Гд...   30.6.2009, 10:54
|- - AD   Цитата(Tonal @ 30.6.2009, 11:54) Можешь н...   30.6.2009, 11:11
|- - AD   да, кстати, а мне нужно наследоваться от стандартн...   30.6.2009, 12:09
|- - AD   Странно, как-то не очень помогло. Или я что-то заб...   30.6.2009, 14:09
|- - BRE   Цитата(AD @ 30.6.2009, 15:09) В чем еще м...   30.6.2009, 14:56
|- - Tonal   Цитата(AD @ 30.6.2009, 18:09) Странно, ка...   1.7.2009, 8:47
|- - AD   Цитата(Tonal @ 1.7.2009, 9:47) Ты выделяе...   1.7.2009, 9:05
|- - AD   В boost в файле allocator.hpp нашел следующий код:...   1.7.2009, 9:59
|- - Tonal   Цитата(AD @ 1.7.2009, 13:05) Цитата(Tonal...   1.7.2009, 10:44
|- - AD   Цитата(Tonal @ 1.7.2009, 11:44) Вот и смо...   1.7.2009, 10:50
||- - AD   Вот блин. Сделал следующий распределитель: allocat...   1.7.2009, 14:55
|- - AD   Цитата(Tonal @ 1.7.2009, 11:44) Вот и смо...   13.7.2009, 11:40
- - Влад   Хм, есть опасение, что если причиной разработки ал...   30.6.2009, 14:49
|- - AD   Влад, исходя из твоих слов, следует заменить глоба...   30.6.2009, 14:59
- - BRE   Почитай вот эту тему. В конце есть готовый алокато...   1.7.2009, 10:37
- - BRE   А ты в профилировщике результаты смотрел, точно им...   1.7.2009, 15:24
|- - AD   Цитата(BRE @ 1.7.2009, 16:24) А ты в проф...   1.7.2009, 15:57
- - Влад   Цитата(AD @ 30.6.2009, 15:59) Влад, исход...   1.7.2009, 16:07
|- - AD   Цитата(Влад @ 1.7.2009, 17:07) Нет. Тут ф...   1.7.2009, 16:10
|- - BRE   Цитата(AD @ 1.7.2009, 17:10) Да, видимо, ...   1.7.2009, 16:49
|- - AD   У меня видоизменилась несколько структура, потому ...   1.7.2009, 17:14
|- - AD   Заметил такую странную вещь: Указал CHUNK_SIZE = 2...   1.7.2009, 17:57
- - Tonal   Может всё же так: ... struct Chunk { Chunk* ne...   2.7.2009, 8:04
|- - AD   Цитата(Tonal @ 2.7.2009, 9:04) Да, ты вед...   2.7.2009, 9:11
|- - AD   Так.... совсем интересно. При загрузке большого ко...   2.7.2009, 10:51
- - Влад   Видел: http://rsdn.ru/forum/cpp.applied/930448.asp...   2.7.2009, 13:38
|- - AD   Так, получилось ускорение с помощью массивов (пока...   3.7.2009, 12:00
|- - AD   Сделал распределитель памяти следующий: allocator#...   6.7.2009, 17:36
|- - AD   Буду очень благодарен за любую помощь. Очень требу...   7.7.2009, 11:07
|- - AD   Так... Ну теперь я совсем не понимаю, почему при з...   8.7.2009, 12:12
|- - AD   Сделал так: вначале чтение всех файлов. Пихаем про...   9.7.2009, 17:10
- - Влад   Цитатаbcp Usage: bcp --list [options] module-li...   13.7.2009, 11:59
- - AD   Итак, сделал вырезку некоторых файлов из boost и д...   13.7.2009, 17:30


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


13 чел. читают эту тему (гостей: 13, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.1.2025, 15:59