释放后LLVM堆值是如何保留的



我正在从LLVM代码中调用一个C函数,它为如下字符串分配一些空间:(char *) malloc(..len..);

%0中的这个mallocated值然后存储在堆栈变量%something中。

define i8* @someFun() {
entry:
%something = alloca i8*, align 8

; mallocing some space for a string
%0 = call i8* @<function-using-malloc>()
store i8* %0, i8** %something, align 8

; freeing heap space
%1 = call i8* @free(i8* %0)
%2 = load i8*, i8** %something, align 8
ret i8* %2
}

store指令之后,我将释放%0,然后从函数返回%something

然后在收到someFun()返回的值后,该值在main()中仍然可用,但我猜它应该被释放了?

define i32 @main() {
entry:
; printing value here correctly after free
%0 = call i8* @someFun()
..printing %0..

ret i32 0
}

我可能缺少一些内存管理知识,所以我的问题是在这种情况下释放%0之前和之后会发生什么?这个值是从一个堆复制到另一个堆吗?

我认为您只需要阅读有关malloc/free的文档。我想这个问题在C线程中被问了一百万次。这里有一个例子:C-空闲后内存会发生什么((?

相关内容

  • 没有找到相关文章

最新更新