Okay, it turns out my problem was the result of an indirect recursion. I had three methods that formed a loop, but it didn't really need to be recursive! (doh!) Just a stupid mistakeā¦ my actual (i.e., deliberate) recursive methods were totally fine.
Anyway, I pulled the three methods all into a single while loop and it seems good now. Thanks, J. On 2013-06-30, at 1:24 PM, Michael Crawford <mdcrawf...@gmail.com> wrote: > Are you using any recursive algorithms? > > You might be but not know it. For example the C standard library > qsort() is recursive. It's worst case runtime is O( n^2 ). In the > average case its stack size is O( log n ). I'm not dead certain but I > think the worst case stack size is O( n^2 ) as well. > > Look through all your code for any methods that have many local > variables, any locals that are large, or very long methods. The > compiler puts invisible temporaries on the stack. If you have a > particularly long method, it will put more of them. The best thing to > do is to break long methods down into several smaller ones, but it's > quicker and easier to subdivide methods by enclosing portions of them > in curly braces, thereby making basic blocks. > > If you set a variable early in a method, but then don't use it until > much later in the method, with something unrelated to that variable > found in-between, that variable is likely to be saved to the stack. > > Your code will run a lot faster if the compiler can store all your > locals in registers, without any use of the stack at all. The ARM on > iOS devices have 16 general-purpose registers, however one is used for > the stack pointer and the other for the frame pointer. x86_64 has > more registers than 32-bit i386 but still not as many as ARM. > > It's a lot faster to allocate a local variable on the stack, but if > that variable is in a recursive method, there will be multiple > instances of it on the stack when you're down in the recursion. If > you allocate it instead, there will only be the pointer on the stack. > > Hope That Helps. > > Mike Crawford > mdcrawf...@gmail.com > http://www.warplife.com/ <--- Real Soon Now. > > On 6/30/13, James Maxwell <jbmaxw...@rubato-music.com> wrote: >> I have a process that's generating a bunch of MIDI files. The process itself >> runs okay, but if I request a large number of files and pause execution at >> some point part way through, I notice that there are literally thousands of >> frames on the stack. In some cases, it will crash before it finishes; >> presumably because it runs out of stack space. I am using ARC (for the first >> time), so I'm wondering if it has something to do with methods retaining >> arguments and/or data they're using??? Or perhaps it has something to do >> with writing the files, which happens within the loop? For the time being, >> this all happens on the main thread (not ideal, but also not a problem for >> me, at this stage) -- could that have something to do with it? >> >> It's really not practical to post code, since there's a lot of it, and it >> would be hard to make it clear how everything goes together, but if anybody >> has any top-of-the-head thoughts about where to start looking, I'd >> appreciate it. >> >> J. >> _______________________________________________ >> >> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) >> >> Please do not post admin requests or moderator comments to the list. >> Contact the moderators at cocoa-dev-admins(at)lists.apple.com >> >> Help/Unsubscribe/Update your Subscription: >> https://lists.apple.com/mailman/options/cocoa-dev/mdcrawford%40gmail.com >> >> This email sent to mdcrawf...@gmail.com > > > -- > Michael David Crawford > mdcrawford at gmail dot com > > Custom Software Development for the iPhone and Mac OS X > http://www.dulcineatech.com/custom-software-development/ _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com