LINUX.ORG.RU

Куча

 , ,


0

1

Предисловие: У нас есть начало кучи - следущая страничка после статической памяти - т.е. sbrk(0). Есть сделать bkr(sbkr(0)+PAGE_SIZE*10) и инициализировать эту память - всё будет отлично. Далее, если все странички не нужны - делается просто bkr(sbkr(0)-PAGE_SIZE*10). Но, проблема в том - если ненужны первые 5, 7, 8 и т.п. страниц, то просто уменьшением дозволеного пространства не обойтись - придётся считать - сколько страниц от конца свободны и уменьшать до последней занятой. Пичаль начинается после того, как будет выделено 1000 страниц, потом 10 и в эти страницы запишутся данные, но после нам уже не нужны 1000страниц, а 10 нужны. И эти 1000страниц будут висеть очень долго.

Вопрос: Как можно исправить эту ситуацию? Городить ещё одну прослойку виртуальных адресов в юзерспейсе?

P.S. Прощу не пинать, ибо нуб.


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

delete83 ★★
()

Использовать подходящий под задачу пул. Если это и есть - подходящий под задачу пул - забить, и не морочить себе голову :D

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

Можно сказать ядру что вот такая-то страница памяти уже не нужна? Чтобы ядро могло отдать эту память кому-нить ещё. Типа дырявое адресное пространство.

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

Можно сказать ядру что вот такая-то страница памяти уже не нужна? Чтобы ядро могло отдать эту память кому-нить ещё. Типа дырявое адресное пространство.

Да, man munmap.

mv ★★★★★
()

Проще всего пулами. Если уж совсем невмоготу без велосипеда, то почитай про реализацию менеджеров памяти. Как ни странно, довольно неплохой вот этот: http://www.rsdn.ru/article/Delphi/memmanager.xml Весьма рекомендую ознакомиться с его устройством хотя бы для общего развития.

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

Спасибо.

Да, думаю - это решение самое лучшее.

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

Проще всего пулами. Если уж совсем невмоготу без велосипеда, то почитай про реализацию менеджеров памяти. Как ни странно, довольно неплохой вот этот: http://www.rsdn.ru/article/Delphi/memmanager.xml Весьма рекомендую ознакомиться с его устройством хотя бы для общего развития.

Это очень похоже на гнумаллок. По ссылке очень плохой и запутанный манеджер. Я лично считаю, что смешивание в менеджере sizeof(elem) и sizeof(elem)*N - изначально тупиковая концепция. sizeof(elem) - отлично ложится на slab и отлично и быстро работает. А вот с sizeof(elem)*N сложнее - тут либо надо жертвовать остатками страницы - либо делать что-то типа менеджера по ссылки - а это добавляет всё пичали - о которых я говорил выше + тормаза.

Может кто-нибудь меня просветит и наставит на пусть истинный?

o2n3e
() автор топика
27 ноября 2012 г.

P.S. Прощу не пинать, ибо нуб.

Это заметно. Суровый челябинский пионер.

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