我想找到LLVM IR中分配内存的每条指令。对于堆栈分配,我只是这样做:
Instruction* I;
if (AllocaInst* AI = dyn_cast<AllocaInst>(I)) {
//stack allocation
}但是堆和静态(全局)分配呢?在LLVM IR中还有什么可以分配内存?
如果LLVM版本有所不同,请提供您所引用的版本。
发布于 2016-09-13 03:17:33
最终,您将无法完美地检测到这一点。堆分配归结为操作系统调用,有人可以直接使用内联程序集进行这些调用。还有一些库调用是链接到的,你看不到它们。
无论你在做什么,都要牢记这一点。
发布于 2016-09-12 21:12:45
内存分配可以是堆栈也可以是堆。对于堆栈分配,你所做的是正确的,你需要检查alloca指令。堆分配由malloc函数调用完成,没有显式的IR指令。
我不做任何实验,但这可能是你可以尝试的方式。
if(MemSetIntrinsic *MSI = dyn_cast<MemSetIntrinsic>(I))
// This call instruction is a memory allocating instruciton https://stackoverflow.com/questions/39429334
复制相似问题