llvm - 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
...
解决方案
_Znwm
代表operator new
(和_ZdlPv
代表operator delete
):
$ echo _Znwm | c++filt
operator new(unsigned long)
推荐阅读
- c++ - 如何完全禁用 CRT
- python - 超越比较不在 Linux (Debian) 上创建 html 报告
- sql - SQL 分区的多个“级别”条件
- reactjs - 导入 npm 包时,找不到隐含“任何”类型的模块 (x) 的声明文件
- apache-spark - 无法在 MacOSx 上运行 pyspark 3.0.0 或 pyspark 2.4.6(使用适用于 linux 的代码)
- java - 慢速 Java 套接字上传
- here-api - 这里地图 - 提供的样式(omv)不起作用
- excel - 使用 IIF 语句查询计算字段
- qt - 如何通过 QProcess (Qt 5.13) 执行一系列命令,而不必每次都使用新参数重新启动它
- reactjs - 如何将密钥传递给root