# How to stop the Kernel from running wild?

How to abort or stop this (accidently large defined) SparseArray production?

s = N[SparseArray[Table[{2^i, 4} -> i, {i, 30}]]]


Alt+. or Alt+, seem to give up. Even your Windows task manager is struggling.

-
Evaluation->Quit Kernel -> Local often succeeds where Abort Evaluation fails for me. –  image_doctor Jan 13 '13 at 16:42
–  István Zachar Jan 13 '13 at 17:17
Concerning the Task Manager statement: Although the TM struggles, and can take a minute or two to respond, I find that patience pays off: navigate to the [Processes] tab, right-click on the instance of Mathkernel.exe that is hogging all the RAM, and choose "end process." Each step can require a painfully long wait, but in the end it does work. –  whuber Jan 13 '13 at 19:12
Another related question: mathematica.stackexchange.com/q/2789/5 –  rm -rf Jan 13 '13 at 20:58

Could use $Pre to wrap things in MemoryConstrained. I'll illustrate with an unusually tight constraint. SetAttributes[memcon, HoldAll] memcon[new_] := MemoryConstrained[new, 10^4]$Pre = memcon;


Examples:

ByteCount[Range[10^6]]

(* Out[4]= $Aborted *) s = N[SparseArray[Table[{2^i, 4} -> i, {i, 20}]]] (* Out[5]=$Aborted *)

-
If you don't preclude the use of $Pre as I did in my earlier question this is an excellent method. I recommend it to anyone using version 7 or earlier. Belisarius gives a nice method for v8+ in the linked thread that does not tie up $Pre. –  Mr.Wizard Jan 14 '13 at 1:14
Another question would be: why does this fill up the memory at all? The array is very sparse with only a few elements. Is there a limit on the size of SparseArrays that's exceeded here? –  Szabolcs Jan 29 '13 at 22:25
@Szabolcs InputForm[SparseArray[Table[{2^i, 4} -> i, {i, 5}]]] seems to show a dense 1-d listwith the jth element indicating how many nontrivial elements have been seen prior to row j. That at least is my guess. –  Daniel Lichtblau Jan 29 '13 at 22:42