Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выделение памяти для списка

445
17 августа 2011 года
Charley
176 / / 16.08.2011
Есть класс односвязного списка типа list, есть другой класс типа graph. В конструкторе у меня выделяется память: H = new list[3000000] Но дело в том, что мне не всегда нужны все 3000000, а время нужное для выделения такого большого кол-ва элементов мне нужно сократить. Посоветуйте как сделать так, чтобы память выделялась только тогда, когда я буду ее использовать?
11
17 августа 2011 года
oxotnik333
2.9K / / 03.08.2007
выделять память непосредствено перед тем как ее использовать, т.е. перед добавлением нового элемента
278
17 августа 2011 года
Alexander92
1.1K / / 04.08.2008
Например, перегрузить operator[]. Чтобы, если индекс лежит за пределами выделенной памяти, выделялась новая память.
350
17 августа 2011 года
cheburator
589 / / 01.06.2006
В таких случаях поступают так. Резервируют место сразу по, скажем, 256 элементов.
При добавлении очередного элемента смотрим, если места нет, резервируем 256 штук, используем только одно.
При добавлении следующего элемента видим, что есть 255 зарезервированных мест, выделение памяти не требуется.
Некоторые алгоритмы выделяют 50% от уже существующего объема (но не менее 1). Открой, например, реализацию вектора в MS VS
445
17 августа 2011 года
Charley
176 / / 16.08.2011
Цитата: Alexander92
Например, перегрузить operator[]. Чтобы, если индекс лежит за пределами выделенной памяти, выделялась новая память.



Целесообразно ли так делать? Будет ли использование оператора более быстрым по времени для тех же 3000000 элементов? Просто эту прогу я пишу для курсовой и не хочу чтобы данные на графике x=кол-во элементов y=время работы были не искажены.

2.1K
17 августа 2011 года
Norgat
452 / / 12.08.2009
Цитата: Charley
Есть класс односвязного списка типа list, есть другой класс типа graph. В конструкторе у меня выделяется память: H = new list[3000000] Но дело в том, что мне не всегда нужны все 3000000, а время нужное для выделения такого большого кол-ва элементов мне нужно сократить. Посоветуйте как сделать так, чтобы память выделялась только тогда, когда я буду ее использовать?




Что мешает взять и посмотреть исходники std::list? Оно темплейт, поэтому реализация точно есть у тебя на компе.


п.с. лучше посмотри реализации MS и GCC, они немного отличаются.

278
17 августа 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Charley
Целесообразно ли так делать? Будет ли использование оператора более быстрым по времени для тех же 3000000 элементов? Просто эту прогу я пишу для курсовой и не хочу чтобы данные на графике x=кол-во элементов y=время работы были не искажены.


Во-первых, это проверяется тестированием. Во-вторых, я ж не говорю, что нужно обязательно выделять строго по одному элементу. Можно, грубо говоря, если не хватает памяти, выделить еще 10 элементов и т.п. Или поступить так, как предлагает cheburator.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог