按照官方文檔說的 使用
int rte_eal_init(int argc, char **argv);
使用上面初始化的EAL應該使用下面的cleanup函數釋放其初始化的資源
int rte_eal_cleanup();
但是,並不能,可能你加上上面的cleanup函數,程序編譯都編譯不過,爲什麼,這一點要問具體的編譯方法了,我現在還沒有搞明白,但是,通過閱讀DPDK源代碼的 arguments getopt_long中的入參,我可以發現一個選項
--huge-unlink
實測,可以釋放上一次初始化過程中申請的大頁內存。檢點點,給出一個僞代碼
#include <rte_eal.h>
...
int main(int argc, char *argv[]) {
/* 通過運行程序參數填寫爲 --huge-unlink */
int ret = rte_eal_init(argc, argv);
if ( ret ... ) {
...
}
return 0;
}
代碼嘍就是這麼簡單,至於他的Makefile文件呢,參見 examples中的helloworld就行了。
然後編譯出可執行文件後執行
# make
# ./build/releasehuge --huge-unlink
...
然後在查看大頁內存,已經被釋放了。