最近發現一個純C寫的Library “simclist”,它這支library使用上也蠻簡單的,支援類iterator的方式存取list,所以我把C++ STL和simclist拿出來比較看看,從記憶體,效能,和排序時間看看它們的優點 

比較不同程式效能前,我都習慣把real-time priority和execution time-slice調成一樣,雖然kernel會自動幫你設定程式執行優先權,但為了保險起見,我還是自己手動比較安心,而real-time priority我調成70,nice值我調成-10,範例如下

int setupPriority() 
{ 
struct sched_param schedparam;
int pid=getpid();
 
setpriority(PRIO_PROCESS,pid,-10);//set to priority -10
schedparam.sched_priority=70;//set RR and priority to 70
if (sched_setscheduler(pid,SCHED_RR ,&schedparam)<0) 
{ 
printf("Scheduler set failed...\n");
return FAIL;
} 
return SUCCESS;
}

我賦予給STL和simclist的元素基本單位都是unsigned int,比較的方式是
(1)新增10000~1000000組的資料,觀察時間和記憶體的消耗量
(2)排序10000~1000000組的資料,觀察所需的時間

C++ LIST STL請參考這個網站,而simclist的用法很簡單,大致流程就是,初始化,註冊功能函式,就可以用了,範例如下

#include "lib/simclist.h" 
list_t MyList;
void initList() 
{ 
list_init(&MyList);
list_attributes_seeker(&MyList,SeekElement);
list_attributes_comparator(&MyList, mycomparator);
list_attributes_copy(&MyList, mymeter, 1);
} 
 
int main(int argc,char *argv[]) 
{ 
initList();
list_append(&MyList,&j);
&hellip;
list_destroy(&MyList);
}

以下是性能的分析
(1)比較新增元素所花的時間,紅色為simclist,藍色為C++ STL,長條圖越短越好

(2)比較新增元素所花的記憶體,紅色為simclist,藍色為C++ STL,長條圖越短越好

(3) 比較排序元素所花的時間,紅色為simclist,藍色為C++ STL,長條圖越短越好

綜合上面三點,C++ STL在新增元素所使用的記憶體和時間略勝simclist,但排序則輸給simclist,所以在有大量資料需排序且記憶體使用無上限的話,simclist是不錯的選擇,但如果碰到其它情況,就用C++ STL吧!!

點這邊下載此篇文章所用到的原始碼

最後修改日期: 3 6 月, 2022

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。