Regarding the 32K size limit on local variables, the reason dates back to
the days of the 68K Macs. In a local routine, variables on the stack are
accessed as a 16 bit offset from a register, usually A6 (as opposed to A5
for global and "static" variables). They could be positively or
negatively offset, so the limit for referencing local variables was 32K.
It shouldn't be a real limit for a good compiler or the PPC, but
apparantly CW doesn't take care of it.
-Sam
>Hello, Lionel.
>
>on 99.11.9 6:18 PM, Lionel Bonnet at [EMAIL PROTECTED] wrote:
>
>> The 32K limit doesn't really exists on PowerPC : in each application memory
>> zone, you have the stack zone and the heap zone.There is a default stack
>> zone(32 K)but if you want to increase it, you must change the limit of the
>> heap, and so the limit of the stack.
>> So you must insert this code at the very beginning of the application :
>>
>> stkNeeded=StackNeeded();
>> if (stkNeeded > StackSpace())
>> {
>> SetApplLimit((Ptr) ((long) GetApplLimit() - stkNeeded + StackSpace()));
>> }
>> heapSize = (long) GetApplLimit() - (long) ApplicationZone();
>
>I know, of course, stack meaning, though, this is not such a problem, I
>think. We can easily increase stack size with project settings -> target ->
>PPC target -> stack size (default 64K) in CW.
>
>I wrote following test code, but could not compile. The line,
>
> char chunk[64*1024L];
>
>is smaller than 128*1024L, and there may be enough remnant of stack,
>however, CW tells me "local data is larger than 32K". I do think, locak data
>is not equal to stack. Local data may mean local variables in specific
>funcion.
>
>How can I break though this limit? I ask this in general macintosh
>programming mailing list, people says, "There is no way. Make it global or
>static."
>
>Do I misunderstand?
>
>TIA.
>
>#include <string.h> /* for memset */
>
>#include <Types.h>
>#include <Memory.h>
>#include <Quickdraw.h>
>#include <Fonts.h>
>#include <Events.h>
>#include <Menus.h>
>#include <Windows.h>
>#include <TextEdit.h>
>#include <Dialogs.h>
>#include <OSUtils.h>
>#include <ToolUtils.h>
>#include <SegLoad.h>
>#include <Sound.h>
>
>void Initialize(void);
>
>int main(void)
>{
> long stkNeeded /*, heapSize */;
>
> Initialize();
>
> stkNeeded = 128*1024L; /* StackNeeded(); */
> if (stkNeeded > StackSpace())
> {
> SetApplLimit((Ptr) ((long) GetApplLimit() - stkNeeded +
>StackSpace()));
> }
> /* heapSize = (long) GetApplLimit() - (long) ApplicationZone(); */
>
> do {
> } while (!Button());
>
> return 0;
>}
>
>void Initialize(void)
>{
> InitGraf(&qd.thePort);
> InitFonts();
> InitWindows();
> InitMenus();
> TEInit();
> InitDialogs(nil);
> InitCursor();
>}
>
>void foo(void)
>{
> char chunk[64*1024L];
> memset(chunk, 0x00, 64*1024L);
>}
>
>--
>MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )
--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )