考虑这个程序:
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模式的过程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)