我最近在g ++ 4.4.6中测试了fastflow,以下是一个非常简单的测试:
using namespace ff ;
int g1=0 ;
class Stage1 : public ff_node{
public :
void *svc(void *task){
g1++ ;
if(g1 >= 10000)
{
return NULL ;
}
char *p=(char*) calloc(sizeof(char),10) ;
return ((void*)p) ;
}
} ;
class Stage2 : public ff_node{
public :
void *svc(void *task){
free(task) ;
return GO_ON ;
}
} ;
int main(int agrc,char *argv[])
{
ff_pipeline pipe ;
pipe.add_stage(new Stage1()) ;
pipe.add_stage(new Stage2()) ;
for(int idx=0;idx<1000000;idx++)
{
g1 = 0 ;
if(pipe.run_and_wait_end() <0){
error("running pipeline\n");
return -1 ;
}
printf("idx=(%d)\n",idx) ;
}
return 0 ;
}
这个测试很简单,但我观察linux中top的内存使用情况, 我发现“VIRT”和“RES”正在增加,我不知道,因为Stage1 分配内存,Stage2将释放它,非常简单的实现,请问 我在这个测试样本中想念的是什么?!
编辑:
class Stage1 : public ff_node{
public :
void *svc(void *task){
g1++ ;
if(g1 >= 10000)
{
return NULL ;
}
//char *p=(char*) calloc(sizeof(char),10) ;
//return ((void*)p) ;
std::auto_ptr<char> x(new char(10)) ;
return ((void*)x.get()) ;
}
} ;
class Stage2 : public ff_node{
public :
void *svc(void *task){
//free(task) ;
return GO_ON ;
}
} ;
使用auto_ptr仍然会遇到同样的问题....