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

Ваш аккаунт

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

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

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

Расположение контейнеров STL в памяти

1.8K
04 февраля 2007 года
Azaze1
102 / / 08.01.2005
Привет всем.
Собственно вопрос: знает ли кто-нибудь, как котнейнеры STL (в частности интересует vector) располагаются в памяти? Насколько я знаю контейнер типа list совсем не обязательно должен располагаться последовательно, т.к. каждый элемент его хранит указатель на следующий и предыдущий, т.е. в памятит они могут лежать разрывно. А что с вектором? с очередью?
Простейший код + дебаггер показывают, что хранение вектора по крайней мере последовательное. но всегда ли это так?
Буду рад любым идеям и инфе )
p.s. Стек не рассматриваем, не подходит в силу специфики задачи ))
63
04 февраля 2007 года
Zorkus
2.6K / / 04.11.2006
Насчет вектора - это некоторая абстрактная модель, представляющая интерфейс динамического массива при операциях с элементами. Но стандартом, насколько я знаю, не оговорено ,как именно должен быть внутренне реализован вектор, особенности реализации определяются требованиями STL к сложности поддерж. контейнером операций.Потому подавляющее большинство реализаций использует для внутреннего представления дин. массив, потому элементы в нем всегда хранятся в определенном порядке (упорядоченная коллекция).
3
04 февраля 2007 года
Green
4.8K / / 20.01.2000
Цитата: Azaze1

Собственно вопрос: знает ли кто-нибудь, как котнейнеры STL (в частности интересует vector) располагаются в памяти?



Рекомендую читать стандарт C++ (2003г).
Там все подробно описано, в т.ч. что "The elements of a vector are stored contiguously".
Исключение - vector<bool>

309
04 февраля 2007 года
el scorpio
1.1K / / 19.09.2006
Все контейнеры располагаются там, где их объявили: локальные - в стеке программы; глобальные/статические - в области глобальных перемен; поля класса - смотря где объект класса создан.
А данные контейнера располагаются в "куче". Но программист об этом думать не должен, ибо хороший контейнер скрывает операции выделения, перераспределения и освобождения памяти.

Цитата:
Простейший код + дебаггер показывают, что хранение вектора по крайней мере последовательное. но всегда ли это так?


Значит так ;)
В крайнем случае, ещё можно посмотреть исходники.

63
04 февраля 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: el scorpio
Все контейнеры располагаются там, где их объявили: локальные - в стеке программы; глобальные/статические - в области глобальных перемен; поля класса - смотря где объект класса создан.


Мне показалось, автора скорее интересовала внутренняя структура контейнеров.

Цитата: el scorpio

А данные контейнера располагаются в "куче". Но программист об этом думать не должен, ибо хороший контейнер скрывает операции выделения, перераспределения и освобождения памяти.
В крайнем случае, ещё можно посмотреть исходники.


Думаю, их нужно cмотреть, куски хотя бы, чтобы знать особенности реализации.

1.8K
04 февраля 2007 года
Azaze1
102 / / 08.01.2005
el scorpio , интересует именно физическое расположение в памяти, а точнее "разрывность" расположения элементов )) То что дебаггер даже раз пять-шесть показал связное расположение в памяти ничего не значит - это может быть не доказательством, а наоборот, исключением из правил. ))
судя по исходникам вроде как должно быть связным, хотя я могу ошибаться.
2Green: спасибо ) в следующий раз буду смотреть внимательней )
320
08 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Вектор располагается в памяти непрерывной областью.Это позволяет получать эффективный прямой доступ к элементам операцией [ ]. Стандартом рекомендуется использовать по умолчанию вектор .
deque - располагается в памяти по кускам,но то же позволяет получать прямой доступ к элементам посредством [ ].( несколько медленее ?)
Кроме стандарта все контейнеры и последовательные и ассоциативные хорошо описаны (с рисунками) в книге Николай Джосьютис. С++Стандартная библиотека для профессионалов.(читаю - супер).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог