Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление, освобождение памяти 
:(
    Опции темы
Амортизатор
Дата 18.2.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: 1
Всего: 8



Суть вот чем. Надо без всякого STL реализовать добавление, удаление элементов. Добавление будет идти в конец последовательности, удаление - из начала. STL как я понял не катит, поскольку vector будет тормозить, переписывая при каждом удалении из начала весь массив, а список не годится - надо бегать по последоваетльности часто и быстро.

Я хочу реализовать это дело функциями malloc и remalloc. Выделять malloc'ом типа
int prt=malloc(N*sizeof(myclass*)) память, и при удалении элемента с начала realloc(ptr+sizeof(myclass*), (N-1)*sizeof(myclass*)), при добавлении аналогично добавлять.

Вопрос - разумно ли это, и насколько быстра функция malloc?
Добавлено @ 22:32
Все это буде происходить на WM_TIMER, поэтому быстрота исключительно важна.


--------------------
Поехали!
PM MAIL   Вверх
LPBOY
Дата 18.2.2006, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(Амортизатор @ 18.2.2006, 22:31 Найти цитируемый пост)
Добавление будет идти в конец последовательности, удаление - из начала. STL как я понял не катит, поскольку vector будет тормозить, переписывая при каждом удалении из начала весь массив, а список не годится - надо бегать по последоваетльности часто и быстро.


Здесь подойдет std::deque, или еще лучше std::queue.
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Амортизатор
Дата 18.2.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: 1
Всего: 8



Нельзя дать краткое описание этих классов? msdn сейчас нету под рукой.


--------------------
Поехали!
PM MAIL   Вверх
DeadSoul
Дата 18.2.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



msdn.microsoft.com


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Амортизатор
Дата 18.2.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: 1
Всего: 8



Да только что там был.

Цитата

The Standard Template Library (STL) sequence container deque arranges elements of a given type in a linear arrangement and, like vectors, allow fast random access to any element and efficient insertion and deletion at the back of the container. However, unlike a vector, the deque class also supports efficient insertion and deletion at the front of the container.


Подтвердите, пожалуйста, что добавление вперед массива будет происходжить столь же быстро, что и в конец, и что скорость не зависит от размера вектора, и в частности не будет при каждой вставке перекопирования элементов.


--------------------
Поехали!
PM MAIL   Вверх
LPBOY
Дата 19.2.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(Амортизатор @ 18.2.2006, 23:53 Найти цитируемый пост)
Подтвердите, пожалуйста, что добавление вперед массива будет происходжить столь же быстро, что и в конец, и что скорость не зависит от размера вектора, и в частности не будет при каждой вставке перекопирования элементов.


Да, в этом и смысл двусторонней очереди (deque). - Вставка/удаление элемента в начало/конец происходит быстро (за константное время) без перемещения элементов. А queue это более специализированный адаптер, добавление(push) элементов происходит в конец, а удаление(pop) из начала. По умолчанию queue реализуется на основе дека (std::deque), поэтому операции push/pop происходят также быстро.
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Амортизатор
Дата 19.2.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: 1
Всего: 8



Спасибо, это информация мне очень помогла.


--------------------
Поехали!
PM MAIL   Вверх
Earnest
Дата 21.2.2006, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Амортизатор @ 18.2.2006, 22:31 Найти цитируемый пост)
Все это буде происходить на WM_TIMER, поэтому быстрота исключительно важна.

smile
Т.е. не чаще чем раз в 10 mc...
Уверяю тебя по сравнению с вызовами WinAPI, в тем паче GDI - все выделения-развыделения памяти полная ерунда... разве что каждый твой элемент по пол-мегабайта весит...
Это я к чему: не ищи проблем там где их нет. smile

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



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.