OK, so there is a way to change the size of the stack for an NSThread. But how do I do this for an NSOperationQueue?
NSThread has the following selector: - (void) setStackSize:(NSInteger)s; I need to find the equivalent selector for NSOperationQueue. Any ideas out there? Leo #import <Cocoa/Cocoa.h> @interface MemoryTortureController : NSObject { } - (IBAction)memoryTortureBackground: (id) sender; - (IBAction)memoryTorture: (id) sender; @end @implementation MemoryTortureController - (IBAction)memoryTortureBackground: (id) sender { NSThread* thread; thread = [[NSThread alloc] initWithTarget: self selector: @selector(memoryTorture:) object: sender]; // The magic line [thread setStackSize:256000*8]; [thread start]; } - (IBAction)memoryTorture: (id) sender { int bigmem[256000]; for (int i = 0 ; i < 256000 ; i ++) bigmem[i] = 2*i; } @end On Wed, Feb 18, 2009 at 3:31 AM, Leo Singer <doc.aron...@gmail.com> wrote: > Actually, if the big array and the loop are moved from the C++ method > into the Objective C selector - (void) main then the same > EXEC_BAD_ACCESS occurs. So the problem is not related to C++. The > following source code still exhibits the same problem: > > //////////////// TestOperation.h ///////////////////// > #import <Cocoa/Cocoa.h> > > @interface TestOperation : NSOperation { > } > @end > > //////////////// End of TestOperation.h ///////////////////// > > //////////////// TestOperation.mm ///////////////////// > #import "TestOperation.h" > > @implementation TestOperation > - (void) main > { > int bigArray[256000]; > > for (int j = 0 ; j < 256000 && ![self isCancelled] ; j ++) > { > bigArray[j] = 2*j; > } > } > @end > > //////////////// End of TestOperation.mm ///////////////////// > > On Wed, Feb 18, 2009 at 3:16 AM, Leo Singer <doc.aron...@gmail.com> wrote: >> Hi, >> >> I have a C++ method that I am invoking from within the - (void) main >> selector of an NSOperation. My Cocoa application is crashing because >> this particular C++ method puts a huge amount of data on the stack. I >> am getting an EXEC_BAD_ACCESS error. However, the same C++ routine >> works fine if I call it from within a command line C++ program. >> >> I have contrived some sample code to illustrate the problem. >> TestOperation is an (Objective C) subclass of NSOperation; I am >> running the NSOperation in a separate thread by putting it into an >> NSOperationQueue. TestOperationImpl is a C++ class. The NSOperation >> is responsible for doing one thing only: calling the go() method on an >> instance of TestOperationImpl. >> >> Note the very large array of ints that is declared inside >> TestOperationImpl::go(). If it is changed to an array of shorts or an >> array of chars, then this example code works fine, no EXEC_BAD_ACCESS. >> >> Is there any way for me to give my application more memory, or at >> least give more memory to the thread that is running this C++ method? >> >> Thanks, >> Leo >> >> //////////////// TestOperation.h ///////////////////// >> #import <Cocoa/Cocoa.h> >> >> class TestOperationImpl { >> private: >> bool cancelled; >> public: >> TestOperationImpl(); >> void go(); >> void cancel(); >> }; >> >> @interface TestOperation : NSOperation { >> TestOperationImpl* testOpImpl; >> } >> - initWithController: (TestOperationController*) controller; >> @end >> >> //////////////// End of TestOperation.h ///////////////////// >> >> //////////////// TestOperation.mm ///////////////////// >> #import "TestOperation.h" >> >> TestOperationImpl::TestOperationImpl(TestOperationController* controller) >> : cancelled(false) >> { >> } >> >> void TestOperationImpl::go() >> { >> int bigArray[256000]; >> >> for (int j = 0 ; j < 256000 && !cancelled ; j ++) >> { >> bigArray[j] = 2*j; >> } >> } >> >> void TestOperationImpl::cancel() >> { >> cancelled = true; >> } >> >> @implementation TestOperation >> - initWithController: (TestOperationController*) ctrl >> { >> if (self = [self init]) >> testOpImpl = new TestOperationImpl(ctrl); >> controller = ctrl; >> return self; >> } >> - (void) dealloc >> { >> delete testOpImpl; >> [super dealloc]; >> } >> - (void) cancel >> { >> testOpImpl->cancel(); >> [super cancel]; >> } >> - (void) main >> { >> testOpImpl->go(); >> } >> @end >> >> //////////////// End of TestOperation.mm ///////////////////// >> > _______________________________________________ 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com