无限recursion转化为D模式的过程

无限recursion转化为D模式的过程,第1张

概述无限recursion转化为D模式过程

考虑这个程序:

int w(int x,int y){ if(x != y) { w(x,y); }else return x+y; }

这样调用:

w(0,5);

对于不同的值(如上面),它会生成一个无限recursion。 问题是,一旦程序以这种方式启动,具体过程变成D模式(等待内部I / O,因此不可触摸)。

@H_404_14@

采取一个正常的循环

while(1){ if(0 != 5){ //foo }else{ //bar } }

生成R状态模式 – 完全可以获得SIGKILL。

是malloc确定性的?

通过c ++ WinAPI来计算MD5哈希值

pthread中两个线程之间的通信

如何在windows中redirectstd :: cout和printf

我在哪里可以放置除了没有pipe理权限的LOCALMACHINE -Registry以外的常用用户数据

虽然正常的循环在性能上击败了recursion; 该系统应该仍然能够杀死进程。

为什么发生这种情况? 以及如何防止它远程?

该代码将被编译成由程序执行,该程序通过套接字将其输出返回给Web客户端。 所以不能控制用户试图编译的内容。

编辑:

无处不在的编译和运行代码的过程:

$ g++ main.cpp -om $ ./m

EDIT2:

$ g++ --version g++ (GCC) 4.9.2 20150204 (prerelease) copyright (C) 2014 Free Software Foundation,Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABIliTY or fitness FOR A PARTIculaR PURPOSE. $ df --print-type filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda2 ext4 957174124 168965980 739563400 19% / dev devtmpfs 4087124 0 4087124 0% /dev run tmpfs 4089872 528 4089344 1% /run tmpfs tmpfs 4089872 76 4089796 1% /dev/shm tmpfs tmpfs 4089872 0 4089872 0% /sys/fs/cgroup tmpfs tmpfs 4089872 1052 4088820 1% /tmp tmpfs tmpfs 817976 12 817964 1% /run/user/1000

testing在Arch linux x64上进行(使用最新的gcc)。

EDIT3:

即使重新安装 *** 作系统后也会发生同样的问题。 该图像已经在另一台电脑上使用,而这个问题不会发生。

C ++ / windows:HeapAlloc()用于无竞争的每线程堆

强大的方法来检测文件是否已经改变

SetwindowsHookEx()仅适用于当前进程

在windows中拖放的通知

我如何读取subprocess的输出?

我不确定是否有责任:

以这种方式启动您的命令:

./m & echo $! > mpID

所以杀死进程:

kill $(cat mpID)

我将从这个答案(zerodeux)的引用开始: linux进程状态 。

… D状态( TASK_UNINTERRUPTIBLE )是一种特殊的睡眠模式,它只在内核空间代码路径中被触发, 当代码路径不能被中断 (因为编程复杂),大部分时间在希望能尽快封锁 。 我相信大多数“D国”实际上是看不见的,它们是非常短暂的,不能通过诸如“顶”之类的抽样工具来观察。

所以,内核可能会设置一个进程的D状态 ,因为它调用某个函数(正好是被调用的函数,没有其他的函数),因为涉及内存工作,调用堆栈修改以及其他复杂的事情。

你的代码在w(x,y)调用之间几乎没有任何时间w(x,y)所以有可能导致你看到连续的D状态 。

我不能复制你的代码的行为,但是我有一个实验,在调用w(x,y)之前设置一个时间睡眠(大约一秒钟就够了w(x,y) ,看看发生了什么。

另一方面,我认为这个程序实际上是被执行的,事实上在你的代码中你传递了x和y作为值,所以在每次调用时都会创建副本,并且会调用内存(调用堆栈也消耗内存) 。 然后可以(另一个实验)检查内存消耗情况,如果程序没有执行,内存消耗保持不变。

总结

以上是内存溢出为你收集整理的无限recursion转化为D模式的过程全部内容,希望文章能够帮你解决无限recursion转化为D模式的过程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1290038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存