我想找到在LLVM IR中分配内存的每条指令。对于堆栈分配,我只是这样做:
Instruction* I;
if (AllocaInst* AI = dyn_cast<AllocaInst>(I)) {
//stack allocation
}
但是堆和静态(全局)分配呢? 还有什么可以在LLVM IR中分配内存?
如果LLVM版本有所不同,请提供您所指的版本。
答案 0 :(得分:2)
最终,你无法完美地发现这一点。堆分配归结为操作系统调用,有人可以使用内联汇编直接进行这些调用。还有一些您已赢得的图书馆电话,但这些图书馆电话已被链接。
请记住您正在处理的任何事情。
答案 1 :(得分:0)
内存分配可以是堆栈和堆。对于堆栈分配,您正在做的是正确的,您需要检查alloca指令。堆分配是通过malloc函数调用完成的,没有明确的IR指令。
我不做任何实验,但可能是你可以试试的方式。
if(MemSetIntrinsic *MSI = dyn_cast<MemSetIntrinsic>(I))
// This call instruction is a memory allocating instruciton