[在LLVM中申请堆中的内存时,我们可以使用malloc
,但是IR clang ++编译的c ++代码使用_Znwm
(_ZdlPv
而不是free
)。
为什么?我们应该选择哪一个呢?
源代码:
class A {
public:
A();
int a;
};
int main() {
A *a = new A();
// delete a;
return 0;
}
IR代码;
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
...
[_Znwm
代表operator new
(_ZdlPv
代表operator delete
):
$ echo _Znwm | c++filt
operator new(unsigned long)