24.4.2 Memory Conservation Tips
Some tips to saving memory (some of these use examples from the
cmcast-100.tcl script):
If you have many links or nodes:
- Avoid trace-all :
- $ns trace-all $f causes trace objects to be pushed on all links. If
you only want to trace one link, there's no need for this overhead. Saving
is about 14 KB/link.
- Use arrays for sequences of variables :
- Each variable, say n$i in set n$i [$ns node], has a certain
overhead. If a sequence of nodes are created as an array, i.e.
n($i), then only one variable is created, consuming much less
memory. Saving is about 40+ Byte/variable.
- Avoid unnecessary variables :
- If an object will not be referred to later on, avoid naming the object.
E.g.
set cmcast(1) [new CtrMcast $ns $n(1) $ctrmcastcomp [list 1 1]]
would be better if replaced by
new CtrMcast $ns $n(1) $ctrmcastcomp [list 1 1].
Saving is about 80 Byte/variable.
- Run on top of FreeBSD :
- malloc() overhead on FreeBSD is less than on some other systems. We will
eventually port that allocator to other platofrms.
- Dynamic binding :
- Using bind() in C++ consumes memory for each object you create. This
approach can be very expensive if you create many identical objects.
Changing bind() to delay_bind() changes this memory
requirement to per-class. See ns/object.cc for an example of how to do
binding, either way.
- Disabling packet headers :
- For packet-intensive simulations, disabling all packet headers that
you will not use in your simulation may significantly reduce memory
usage. See Section 12.1 for detail.
Tom Henderson
2011-11-05