Valgrind has a couple of memory profiling tools. I usually don't recommend Massif because heaptrack usually does a good job with much lower overhead. Massif can be useful for apps that link with a static allocator library/libc and apps that use their own custom allocator.
I'm also not really going to recommend callgrind or cachegrind. They do give reproducible results and KCachegrind is a nice viewer but they don't model speculative execution and only have very primitive branch prediction and cache models.
DHAT is a nice tool that examines heap memory accesses. You can use it to see access patterns (quite useful in conjunction with pahole), find how long an allocation lasts, find blocks that are barely used etc. It is really slow though :-(
Valgrind has a couple of memory profiling tools. I usually don't recommend Massif because heaptrack usually does a good job with much lower overhead. Massif can be useful for apps that link with a static allocator library/libc and apps that use their own custom allocator.
I'm also not really going to recommend callgrind or cachegrind. They do give reproducible results and KCachegrind is a nice viewer but they don't model speculative execution and only have very primitive branch prediction and cache models.
DHAT is a nice tool that examines heap memory accesses. You can use it to see access patterns (quite useful in conjunction with pahole), find how long an allocation lasts, find blocks that are barely used etc. It is really slow though :-(