2014-11-18 7 views
2

У меня есть программа, которая требует от 2k до 4M памяти для каждого потока. Потоки непрерывно порождаются (скажем, 20 потоков), поэтому, как только он возникает, ему требуется память между 2k - 4m (случайным образом), использует его, выходит и снова появляется. Теперь я хочу знать, должен ли я выделить максимум 4M памяти один раз для каждого потока и использовать эту память, даже когда мне нужна меньшая память, что позволяет избежать выделения и освобождения памяти каждый раз и может предотвратить фрагментацию. Но недостатком является то, что я вижу много ошибок страниц, когда количество потоков увеличивается до 100 или более.Одноразовое распределение памяти или динамическое распределение

Не знаете, как решить реализацию. Любые предложения полезны?

+0

У нас есть концепция пула памяти. Попробуйте реализовать или использовать существующую библиотеку пула памяти. – Sasi

+0

https://en.wikipedia.org/wiki/Memory_pool – Agis

ответ

0

Обычно (заметное исключение из этого описания: мобильное устройство) имеется одна куча для всех потоков, которые находятся в процессе. Если поток выделяет память, это добавляется в адресное пространство процесса. Если поток умирает и появляется новый, он может перераспределять память, используемую предыдущим потоком.

Возможно, вы захотите использовать службы операционной системы или библиотечные функции для предопределения кучи подходящего размера, чтобы вы не постоянно расширяли кучу.

Смежные вопросы