/*---------------------------------------------------------------------------* * PStackSize.c * * * * Copyright 2007, 2008 Nuance Communciations, Inc. * * * * Licensed under the Apache License, Version 2.0 (the 'License'); * * you may not use this file except in compliance with the License. * * * * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an 'AS IS' BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * * *---------------------------------------------------------------------------*/ #include "pstdio.h" #include "PStackSize.h" #ifdef _WIN32 static const char * PSTACK_BASE = NULL; /** Initialize the stack base. This should be done in the main() function. * Note that the local variables of main() are not taken into account in the * stack size computation. To overcome this problem, rewrite main() as a * simple function that first invokes PSTACK_SIZE_INIT and then invokes the * original main(). */ void PSTACK_SIZE_INIT() { PSTACK_BASE = (const char *) _alloca(0); } /** * Computes the current stack size. The returned value is the number of bytes * in the stack. **/ size_t PSTACK_SIZE_GET() { return (PSTACK_BASE - ((const char *) _alloca(0))); } #else /* Insert other platform implementations here... */ /* #error not supported at this time */ void PSTACK_SIZE_INIT() {} size_t PSTACK_SIZE_GET() { return 0; } #endif