crossplatform.ru

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

> Какой тип структуры данных у QVector, QList, QMap?
AXELman4ever
  опции профиля:
сообщение 22.9.2011, 23:16
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 22.9.2011
Пользователь №: 2902

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




Репутация:   0  


Доброго времени суток. Перечитал множество информации касательно работы этих контейнеров, но так и не нашел ответ на вопрос "Так где же хранится то, что находится в контейнере?" - в стеке или куче?

К примеру, я имею:

QVector<int> vect_int;

и

QVector<QWidget *> vect_widget;

вызывая метод push_back() для обеих случаев, что происходит в памяти, что кладется в мой вектор, и где хранится то, что кладется в мой вектор? или другими словами - где вектор хранит ссылки на объекты или же сами объекты?

в контейнерах QList и QMap происходит тоже самое? (о том что такое QList, QMap, и о принципах их роботы мне известно)

Убедительная просьба - растолковать. Перекопал весь инет - нигде ничего об этом не упоминается.
Заранее благодарен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Авварон
  опции профиля:
сообщение 22.9.2011, 23:34
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 99
Регистрация: 26.4.2009
Пользователь №: 709

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




Репутация:   0  


Всегда в куче. Имея размер стека 2мб много данных не похранишь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AXELman4ever
  опции профиля:
сообщение 22.9.2011, 23:53
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 22.9.2011
Пользователь №: 2902

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




Репутация:   0  


Цитата(Авварон @ 22.9.2011, 23:34) *
Всегда в куче. Имея размер стека 2мб много данных не похранишь.


Ок, а каким образом получается так, что объекты, хранящиеся в куче занимают места по порядку? Об этом заботится архитектура класса?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vass
  опции профиля:
сообщение 23.9.2011, 1:28
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 17.3.2009
Из: Россия, Рыбинск
Пользователь №: 617

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




Репутация:   0  


Цитата(AXELman4ever @ 23.9.2011, 0:53) *
Ок, а каким образом получается так, что объекты, хранящиеся в куче занимают места по порядку? Об этом заботится архитектура класса?

Да, если вы откроете qvector.h/cpp

Вы увидите там приватный класс QVectorData

С такими методами:

 static QVectorData *malloc(int sizeofTypedData, int size, int sizeofT, QVectorData *init);
    static QVectorData *allocate(int size, int alignment);
    static QVectorData *reallocate(QVectorData *old, int newsize, int oldsize, int alignment);
    static void free(QVectorData *data, int alignment);


Если внимательно изучить код, то становится видно, что класс QVector выделяет на куче кусок памяти и в нем по порядку размещает элементы, соответсвенно если не хватает места вызывается reallocate ну и т.д.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 23.11.2024, 11:56