Аллокация объектов переменного размера на shared memory

megalodon nginx-forum at nginx.us
Wed Oct 30 18:42:12 UTC 2013


Всем привет.

Столкнулся с такой проблемой: допустим, есть дерево в shared memory, где
ключ - ip адрес, а значение - структура, которая хранит определенную
информацию связанную с этим ip. 

С ip необходимо также связать информацию о том, на какие uri он ходил, какие
рефереры присылал, какие ua, и прочие строки. Получается, примерно так:
ip_tree->ip_node ---> per_ip_tree->node. Создать это не проблема, но при
удалении ip_node, скажем по тайм-ауту, необходимо пройтись по всему дереву и
сделать free для указателей всех нод, т.к. ноды в per_ip_tree выделялись по
мере необходимости.

Тут же возникает мысль: выделить сразу большой блок и на нем сделать
ngx_slab_init(). А когда нам потребуется удалить per_ip_tree - будет
достаточно всего лишь сделать один free для всего этого блока, т.к. все ноды
этого per_ip_tree были выделены исключительно из него. 

Вопрос: адекватен ли такой подход в данной ситуации? Если нет, какие можете
подсказать варианты?

Заранее всех благодарю.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,244268,244268#msg-244268



Подробная информация о списке рассылки nginx-ru