On Nov 27, 2008 at 17:15, Daniel-Constantin Mierla <miconda(a)gmail.com> wrote:
Hello,
There seem to be many places where static buffers are used for building
strings. It is clear they are used just for usage inside some functions,
with no need to keep the value for usage somewhere else.
Would defining a global static buffer to be used for such cases make
sense? The access to the pointer and size can be given via functions.
In general I think we should move away from static buffers
(we will need to get rid of a lot of them for the async. stuff so
most of this work will have to be redone anyway).
There could be couple of such buffers to be used in the cases one
function need concurrent access to more than one ... opinions? It will
reduce memory space reserved and used...
I'm afraid it would introduce a lot of new bugs (you must make sure your
functions that call each other do not use the same static buffer and
that you do not call function using the same buffer in a row).
As far as the memory space is concerned, it depends on how many of them
are used.
At least in sip-router core less then 1Mb is used in static vars of all
kinds:
objdump -j .bss -j .data -t ser|perl -ne 'END { print "\nTotal: $s
bytes\n" }; @l=split; $s+= hex $l[4]; print hex($l[4]),
"\t-\t$l[5]\t$l[1]\t$l[2]\t$l[3]\n" '
=> Total: 4604741 bytes in staitic vars, but 4M is the pkg mem pool
=> 410437 bytes from which 2*139276 are tcp local timers and
65k udp recv buffers => 66349 in other static vars and buffers.
So I guess it doesn't make sense to try to go beyond 66k...
Andrei