分页: 1 / 1

测试了一下 vim 的 libcall()

发表于 : 2011-06-01 23:15
自由建客
手册中没说明白,返回的内存块如何处理,简单的测试了一下,很明显,vim 不作为。

代码: 全选

#define SIZE 1024*1024*100

char *test(char *a)
{
    int i;
    char *r=(char *)malloc(SIZE);
    for(i=0; i<SIZE; ++i)
        r[i]='A';
    return r;
}

代码: 全选

fun! Test()
	let i=0
	while i<1024
		redraw
		call libcall("/home/fb/work/vimide/test.so", "test", "")
		!free -m | grep '^-'
		sleep 1
		let i+=1
	endwhile
endfun
可发现内存不断消耗,很快就会提示
“无法 fork”

Re: 测试了一下 vim 的 libcall()

发表于 : 2011-06-02 14:22
fanhe
你试过 garbagecollect() 了没
这么短时间我估计来不及自运行垃圾回收

而且, 本来用 libcall 就是一个非常蛋疼的选择!

Re: 测试了一下 vim 的 libcall()

发表于 : 2011-06-02 22:15
自由建客
garbagecollect() 只会释放 vim 自己申请的内存,贸然释放别人申请的太危险了,况且诸如 libc 中的 getenv 返回的非堆地址根本不可释放,所以 vim 干脆不作为。
只可惜它没有提供个选择,比如 libcallandfree() 。