我试图编译这段 C++ 代码:
void FuncTest() {
int* a = new int;
int* b = new int[2];
}
使用:
clang test.cpp -S -emit-llvm -o - > test.llvm
并得到了这个:
define void @_Z8FuncTestv() {
entry:
%a = alloca i32*, align 4
%b = alloca i32*, align 4
%call = call noalias i8* @_Znwj(i32 4)
%0 = bitcast i8* %call to i32*
store i32* %0, i32** %a, align 4
%call1 = call noalias i8* @_Znaj(i32 8)
%1 = bitcast i8* %call1 to i32*
store i32* %1, i32** %b, align 4
ret void
}
declare noalias i8* @_Znwj(i32)
declare noalias i8* @_Znaj(i32)
我现在想知道的是:_Znwj
和_Znaj
符号来自哪里?他们只是随机分配还是有系统?我希望能够告诉这些行:
%call = call noalias i8* @_Znwj(i32 4)
和
%call1 = call noalias i8* @_Znaj(i32 8)
执行内存分配。但它看起来并不那么有希望。
这里有一些llvm专家有想法吗?