+ -
当前位置:首页 → 问答吧 → 问个__get_free_pages的问题

问个__get_free_pages的问题

时间:2011-06-19

来源:互联网

C/C++ code


char *pagemem=__get_free_page(4);
printk("<1>pagemem length is      %d\n",strlen(pagemem));
char *pagesmem =__get_free_pages(GFP_KERNEL,2);
printk("<1>pagesmem length is      %d\n",strlen(pagemems));



我发现输出的长度在不断的变化,这是为什么呢???

作者: butter0000   发布时间: 2011-06-19

__get_free_page与__get_free_pages是不会清零分配的页面。
strlen()是遇到'\0'字符就结束的。

如果每次分配的页面位置不一样,\0'的位置也不一样,所以长度也不一样啦。

作者: zhangzhaocap   发布时间: 2011-06-19

引用 1 楼 zhangzhaocap 的回复:

__get_free_page与__get_free_pages是不会清零分配的页面。
strlen()是遇到'\0'字符就结束的。

如果每次分配的页面位置不一样,\0'的位置也不一样,所以长度也不一样啦。


非常感谢您的回答,那就像上述那样,我怎么知道所分配的大小是多少呢??

作者: butter0000   发布时间: 2011-06-19

LDD3 上面的
__get_free_page(flags) 分配一个页面
__get_free_pages(flags,order) 分配若干(物理连续的)页面

flags通常使用GFP_KERNEL或GFP_ATOMIC
order是要申请或释放的页面数的以2为底的对数(log2N)

作者: zhangzhaocap   发布时间: 2011-06-19