One probleme is to store light indices since the array is not always the same size and using the "max theorically" the memory size is pretty impossible.
So using a worst case must be used but, if we say we allow 1024 point lights and 1024 spot lights, a good pool is 4*1024*1024 ?
The way we implemented it is to allocate a 'reasonable' buffer and then to grow it when (if) needed.
I think Emil covered how they deal with this in our talk from Siggraph this year:
This talk should provide a few insights into both the general gist of the algorithm and the practical implementation at Avalanche.
Hope it helps.