[Swan-dev] heap allocation vs stack allocation

D. Hugh Redelmeier hugh at mimosa.com
Thu Apr 24 23:45:07 EEST 2014


I noticed that ikev2_out_nat_v2n allocated heap space for each hash.  
This 
memory should be allocated on the stack as local variables.

Stack allocation is much better than heap allocation, if it is
appropriate.

- it is faster

- it does not contribute to heap fragmentation (dangerous and
  insidious in a long-running daemon)

- the system takes care of the lifecycle (including freeing)

- pointers are not required

- the lifetime is trivially evident to any programmer.

When is it appropriate?  Both these must be true:

- the stack lifetime is reasonable (sufficient and not excessive)

- the size is known at compile time or a reasonable bound on the
  size is known at compile time

In the case of ikev2_out_nat_v2n, the hash buffers would be much better 
stack-allocated than heap-allocated.

How many other places in the code have we used unnecessarily used heap
allocation?

PS: in the code, the lifetime of the two hashes did not overlap, so
only one buffer is required.


More information about the Swan-dev mailing list