Cod*_*lus 4 c embedded heap system stack-size
如何确定嵌入式系统上正在运行的C程序的当前堆栈和堆大小?另外,我怎样才能发现嵌入式系统允许的最大堆栈和堆大小?我想到线性调用malloc()的大小越来越大,直到它找不到堆大小,但是我对堆栈的大小更感兴趣.
我使用的是mbed NXP LPC1768,我使用的是在GitHub上开发的名为gcc4mbed的离线编译器.
有更好的想法吗?非常感谢所有帮助!
在运行时测量当前堆栈大小的粗略方法是声明
static void* mainsp;
Run Code Online (Sandbox Code Playgroud)
然后开始你main 的例如:
int main(int argc, char**argv) {
int here;
mainsp = (void*) &here;
Run Code Online (Sandbox Code Playgroud)
然后在一些叶子例程中,当调用堆栈足够深时,做类似的事情
int local;
printf ("stack size = %ld\n",
(long) ((intptr_t) &local - (intptr_t) mainsp));
Run Code Online (Sandbox Code Playgroud)
从应用程序的完整源代码中静态估计所需的堆栈大小通常是不可判定的(考虑递归,函数指针),并且在实践中非常困难(即使在严格限制的应用程序类中).看看Couverture.您也可以考虑使用MELT为此目的定制GCC ,但这并不容易,并且会给您过度近似.
如果使用GCC进行编译,则可以使用返回地址bultins在运行时查询堆栈帧指针.在某些体系结构上,它没有一些优化标志.
至于如何分配堆和堆栈空间,这取决于系统.您可以/proc/self/maps在Linux上解析文件.