按照官方文档说的 使用
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
...
然后在查看大页内存,已经被释放了。