首页 > 解决方案 > malloc 或 _Znwm,我们应该在 LLVM IR 系统中使用它

问题描述

在 LLVM 中申请堆内存时,我们可以使用malloc,但是 IR clang++ 编译 c++ 代码,使用_Znwm(_ZdlPv而不是free)。

为什么?我们应该选择哪一个?

源代码:

class A {
  public:
  A();
  int a;
};

int main() {
  A *a = new A();
  // delete a;
  return 0;
}

红外代码;

define i32 @main() ... {
  %1 = alloca i32, align 4
  %2 = alloca %class.A*, align 8
  ...
  %5 = call i8* @_Znwm(i64 4) #4
  %6 = bitcast i8* %5 to %class.A*
  invoke void @_ZN1AC1Ev(%class.A* %6)
          to label %7 unwind label %8
  ...

标签: llvmllvm-clangllvm-ir

解决方案


_Znwm代表operator new(和_ZdlPv代表operator delete):

$ echo _Znwm | c++filt
operator new(unsigned long)

推荐阅读