LINUX.ORG.RU

[Qt][QSet] Расчет занимаемой памяти

 


0

2

Например, имеется QSet<int> c >100000000 значениями. Как рассчитать, сколько памяти займет этот контейнер?

Будет ли правильным sizeof(int)*n ? Или на самом деле памяти уйдет намного больше?

И еще один вопрос. В моем случае QSet<int> заполняется хешами, получаемыми через qHash(). Насколько безопасно использование qHash() с таким кол-вом данных, есть ли вероятность повторения хеша?

Ответ на: комментарий от Kosyak

Хотя я не гарантирую правильный результат, там внутри все что угодно может быть.

Kosyak ★★★★
()

> Как рассчитать, сколько памяти займет этот контейнер?

наверное так: n * ( sizeof( int ) + sizeof( int*) + sizeof( int ) /* hash */ ) + «мелочь» где-то до 100 байтов

aho
()

> Насколько безопасно использование qHash() с таким кол-вом данных,

QSet использует именно qhash

aho
()

QSet внутри себя память malloc'ами не выделяет? Мне кажется sizeof'a будет мало.

congestion_control
()
Ответ на: комментарий от Kosyak

еще нужно учесть, что в этой формуле n = QSet::capacity(). Или сделать squeeze() после добавления элементов

annulen ★★★★★
()
Ответ на: комментарий от aho

QSet использует именно qhash

Это понятно.

Меня интересует, насколько надежен хеш, который генерирует стандартная функция

uint qHash ( const QString & key )
не повторится ли он среди хешей для 100 миллионов строк?

Не использую md5, т.к уйдет слишком много памяти для хранения строковых значений.

BredoGen
() автор топика
Ответ на: комментарий от BredoGen

>Не использую md5, т.к уйдет слишком много памяти для хранения строковых значений.
либо много, либо коллизии. 16байт*100млн=1.5Гига только на ключи

arhibot
()
Ответ на: комментарий от pinachet

> Но вероятность коллизии очень и очень мала.

ТС оперирует абсолютными понятиями, а не величиной вероятности.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.