操作系统  办公  实用知识  设计  开发  WEB开发  移动开发  数据库  软件工程  网管  安全  管理  信息化  答疑  渠道 

堆栈用法

2006-10-9 网友评论 0 条 点击进入论坛

不要毁坏堆栈!

使用 BREW™ ,运行的每个程序都有一个调用堆栈和堆,并且各具有限的最大空间。如果堆在没有其超出最大空间的情况下不能扩展,并且内存分配尝试又失败,则应用程序应该会检测此情况并尽量温和处理。但如果堆栈扩展超出了其最大空间量(称为“毁坏堆栈”),则数据将被覆盖。这会导致看似随机但常常十分奇怪的缺陷或崩溃现象。毁坏堆栈是种难以调试的问题,因为它可能与数据有关、不会发生在模拟器中且代码看起来似乎没有问题。

务必将您的堆栈大小保持在 500 字节以下。

要减小堆栈大小,请尝试保持较短的调用深度(避免递归或嵌入较深的函数调用)。而且,除简单项目(如 int、指针和其它标量类型)外,请考虑动态分配内存,而不是在堆栈上声明变量。例如,要避免在函数内声明缓冲区,请声明一个指针并动态分配该缓冲区。要进一步降低内存用量和目标代码大小,最好在多个函数中使用全局缓冲区,而不是本地缓冲区。

降低调用深度的一种方法是手动解开您的代码(从在其它情况下会被调用的函数中提取代码并将其插入在其它情况下会调用它的函数中)。

另一种方法是在函数声明中使用 INLINE 规范。但请注意编译器可能不执行 INLINE 指令。例如,作者在写作本文时得知有人报告 ARM C 编译器忽略 INLINE。可以改用 ARM C++ 编译器(即使您写的是常规 C 代码)。此外,许多编译器不内联从函数声明文件之外调用的函数。

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 登录邮箱: 密码:
  匿名发表
今日推荐
技术文库(共有 46468 篇文章)
操作系统
办公软件
实用知识
网络管理
软件开发
WEB开发
软件工程
数据库
设计在线
信息安全
行业信息化
管理信息化
重点推荐
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail