"The reason I do my own memory management is to avoid
fragmentation. The Realeyes IDS manages a lot of sessions
simultaneously, so memory has to be used efficiently as possible.
If a buffer were allocated for exactly the size of a packet's data,
the overall buffer space would develop lots of pockets of unusable
space. But to set the size of data buffers to the largest allowed
by the Internet Protocol would also be inefficient, because there
are a huge number of tinygrams in network traffic.
"The solution is a compromise. I allocate fixed size buffers in
sizes that are designed to waste as little space as possible. The
smallest is 64 bytes. The next is 105 bytes, and the next, 128
bytes. So if 56 bytes are needed, the first size buffer is
allocated. If 65 bytes are needed, the second. And if 108 bytes are
needed, the third."