You should include cmem only in two cases:
1. If a library written in another language allocates memory that you are supposed to free on your side. FPC's memory manager can choke on that.
2. if you have a predictable memory use over large structures (not strings) In that case the cmem memory manager is much faster because it is simpler.
But for normal cases stick to whatever FPC offers you. It's memory manager is not THAT bad (unlike what Marco thinks I always say

) and optimizes memory use in favor of speed.
Note that you should include cmem before anything other, so your code is wrong anyway. First cmem, then cthreads.
Otherwise you'll end up with two memory managers managing your code,which is a bad idea.
If you use the heap debugging feature (-gh) never use cmem: you can't debug properly. It relies on it's own memory manager.
And if you do specify -gh NEVER EVER use heapmm in your uses clause. The compiler puts it in the right place.