linux函数实现阶乘,编写Linux内核模块实现阶乘

题目:

编写一个内核模块,用递归的方法计算一个数的阶乘。先用较小的数字 (例如 3) 验证程序的正确性,然后用较大的数字(例如 100000)实验,看会发生什么,并解释观察到的现象。

实验结果分析

在进行递归的方法计算 100000 的阶乘的时候,代码编译完成后,加载内核,电脑瞬间卡死,CapsLk 键不停的闪烁,鼠标没有反应。第一次等待了近两个小时,电脑还是卡死,没有恢复,强制关机重启后,再次进行编译安装,还是卡死,我认为这不是一次偶然事件,应该是数字太大引起的卡死。后来与老师课上探讨,发现实验的结果真的是卡死了,原因是操作系统溢出无保护,每个进程只能分配大概 4K 的内存空间,数字过大就会导致内核站的溢出,从而导致崩溃。因为电脑卡死了,所以没有 100000 的阶乘的实验截图。

代码

//阶乘10

#include #include MODULE_LICENSE("Dual1 BSD/GPL");

int factorial(int n){

if(n==0)

return 1;

else

n=factorial(n-1)*n ;

return n;

}

static int factorial_10(void)

{

printk(KERN_ALERT "10 10 10 %d",factorial(10));

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT "Goodbye , cruel world!10\n");

}

module_init (factorial_10);

module_exit (hello_exit);

//阶乘10000

#include #include MODULE_LICENSE("Dual1 BSD/GPL");

int factorial(int n){

if(n==0)

return 1;

else

n=factorial(n-1)*n ;

return n;

}

static int factorial_100000(void)

{

printk(KERN_ALERT "100000 %d",factorial(100000));

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT "Goodbye , cruel world!100000\n");

}

module_init (factorial_100000);

module_exit (hello_exit);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值