LINUX.ORG.RU

Несколько куч памяти (C++)

 ,


0

4

Есть множество мелких объектов разных типов, которые появляются в программе постепенно и вперемешку. Память для них стандартно выделяется в куче с помощью new (или malloc, если угодно). Как можно создать несколько куч памяти, по одной для каждого типа объектов? Думаю, если однотипные данные хранятся в памяти вместе, а не вперемешку с другими, это повысит быстродействие. В Windows есть функция CreateHeap. В Linux такого не нашел. Она есть?

createHeap к спп имеет такое же отношение, как колесо к транзистору.

nanoolinux ★★★★
()

Есть множество мелких объектов разных типов, которые появляются в программе постепенно и вперемешку

А порядок их появления при обработке важен? Если нет, то можно их хранить в разных контейнерах, причём по значению, т.е. std::vector будет тебе кучей. Ещё посмотри в сторону Boost.Pool.

Begemoth ★★★★★
()

если однотипные данные хранятся в памяти вместе, а не вперемешку с другими, это повысит быстродействие.

нет. если только не делать как сказали сообщением выше.

next_time ★★★★★
()

Думаю, если однотипные данные хранятся в памяти вместе, а не вперемешку с другими, это повысит быстродействие.

В Linux (точнее glibc) malloc гораздо интеллектуальнее виндового. Он делает автоматически почти то, что ты задумал вручную. Можешь посмотреть, например, про алгоритм работы гуглового tcmalloc, который можно использовать вместо стандартного glibc'шного. Но и стандартный работает вполне хорошо.

В общем, по моему мнению, в Linux нет необходимости в CreateHeap. Хотя, если у тебя довольно специфическое приложение, которое часто выделяет и уничтожает множество объектов одного размера, то кешировать их с помощью чего-то типа boost::pool, может оказаться полезным для быстродействия. При этом обязательно нужно делать сравнение скорости работы с каким-нибудь аллокатором памяти типа tcmalloc или http://www.nedprod.com/programs/portable/nedmalloc/

x_hash
()

Как можно создать несколько куч памяти, по одной для каждого типа объектов? Думаю, если однотипные данные хранятся в памяти вместе, а не вперемешку с другими, это повысит быстродействие.

ты слишком много думаешь. Лучше о коде подумай.

emulek
()

В С++ можно для каждого класса задать операторы new и delete, которые и будут использоваться при создании/разрушении объектов этих классов. А для самого хранения использовать разные пулы.

BRE ★★
()

а ты уверен, что тебе именно выделение памяти нужно оптимизировать, или только догадки? для начала попрофилируй

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

В Linux (точнее glibc) malloc гораздо интеллектуальнее виндового. Он делает автоматически почти то, что ты задумал вручную.

Ничего подобного он не делает, в glibc обычная куча общего назначения.

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

ты слишком много думаешь. Лучше о коде подумай.

+1

anonymous
()
Ответ на: комментарий от BRE

при желании можно и ::new/::delete пере(за)грузить.

вот только я не думаю, что ТСу это поможет. Вообще быстродействие не числом куч берётся, а

1. грамотными и уместными алгоритмами

2. железом

emulek
()
Ответ на: комментарий от x0r

Пока в Вилларибо думают о коде, в Виллабаджо уже протегировали репозиторий.

полный говнокода с Over9000 кучами(говна)?

emulek
()

в STL есть аллокаторы.

еще можно new/delete перегрузить.

еще можно заюзать подходящую си-шную либу под это дело

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