LLVM does it only for very particular things. Otherwise it is using malloc a lot. The ownership is interesting as well, as some pieces are "leaked" to the LLVMContext, which has some granularity: it owns the module you're working on, so can't be destroyed before you don't need the module anymore.