| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
堆栈用法不要毁坏堆栈! 使用 BREW™ ,运行的每个程序都有一个调用堆栈和堆,并且各具有限的最大空间。如果堆在没有其超出最大空间的情况下不能扩展,并且内存分配尝试又失败,则应用程序应该会检测此情况并尽量温和处理。但如果堆栈扩展超出了其最大空间量(称为“毁坏堆栈”),则数据将被覆盖。这会导致看似随机但常常十分奇怪的缺陷或崩溃现象。毁坏堆栈是种难以调试的问题,因为它可能与数据有关、不会发生在模拟器中且代码看起来似乎没有问题。 务必将您的堆栈大小保持在 500 字节以下。 要减小堆栈大小,请尝试保持较短的调用深度(避免递归或嵌入较深的函数调用)。而且,除简单项目(如 int、指针和其它标量类型)外,请考虑动态分配内存,而不是在堆栈上声明变量。例如,要避免在函数内声明缓冲区,请声明一个指针并动态分配该缓冲区。要进一步降低内存用量和目标代码大小,最好在多个函数中使用全局缓冲区,而不是本地缓冲区。 降低调用深度的一种方法是手动解开您的代码(从在其它情况下会被调用的函数中提取代码并将其插入在其它情况下会调用它的函数中)。 另一种方法是在函数声明中使用 INLINE 规范。但请注意编译器可能不执行 INLINE 指令。例如,作者在写作本文时得知有人报告 ARM C 编译器忽略 INLINE。可以改用 ARM C++ 编译器(即使您写的是常规 C 代码)。此外,许多编译器不内联从函数声明文件之外调用的函数。
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||