我正在从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-空闲后内存会发生什么((?