Symbian OS C++程序员编码诀窍-系统资源的使用(ROM 和 RAM)
2010-09-06 08:12:00 来源:WEB开发网有许多方法可以减少 RAM 的使用。其中的一些方法(如 bitfields)可能使代码可读性变差,所以经常要在减少 RAM 使用和增加代码复杂性这两者之间作折衷。
使用 bitfields(位元组合), 而不使用太多的 Tbools考虑用 bitfields(位元组合)来存储类中大量的布尔数据。每一个Tbool需要 32位的RAM,而这32 位可以用位元组合的形式保存 32 个布尔值。如上所述,我们可以比较一下:提高代码复杂性和使用 bitfields 各自的潜在利益。
阵列粒度的使用警示
可以为所有继承自 CArray 的类规定粒度。其目的是:只以一定大小的块为阵列分配空间,从而使代码更为高效。这种方法很有效,但需要考虑粒度的选取问题。如果需要为 5 至 8 个对象准备一个阵列,那么粒度定为 4 到 5 就是明智的。如果一个阵列总是含有15个对象,那么粒度就应该定为15 。然而,如果对象的数目是 2 个到 3 个,那么粒度定为 100就很愚蠢了。类似的,如果有 101到 105个对象,那么粒度为 100也是愚蠢的,因为每次都需要分配 200个空间。当然,粒度为 1也属不智,因为这将需要太多次的重新分配。最终选择取决于使用方式。
避免全局数据
不要使用全局数据。对于只用于一个函数内的变量,请用局部变量,而不是成员变量。
小心基类的成员数据
如果要写一个用途广泛的基类,请小心成员数据。不要将只用于某些继承类的成员数据添加其中,因为每个继承类除了拥有它,别无其他选择。注意只将真正普通的成员函数包括其中。
正确使用清除堆栈
如果正确地使用了清除堆栈,代码中就不应该再有内存泄漏,这样就能保证该应用没有使用超出其需要的 RAM。
尽早删除
如果在堆中分配了临时对象,当不再需要它们时请将其立即删除。如果这些临时对象的生命长于其需要的时间,那么该应用的 RAM 开销往往要高于其实际所需要的。请记住,如果删除了某个临时对象,而指向这个对象的指针还在,那么就需要将该指针设为NULL,以防止非法访问或两次删除。
用最大数据集进行硬件测试
如果某个数据集有上限,那么就用最大数据集来进行硬件测试。如果从来没有对硬件进行过极限测试,很有可能会忽略某些非常慢的运算,或导致问题等。
3.3.8 分解复杂的长运算在屏幕上显示冗长列表会对 RAM 使用形成压力。而且,当初始化各列表控件(如:设备上所有联系人的列表,或便条列表)时,其表现极差。可以编写特别的控件来避免这种情况,这些控件只组装屏幕上可见的栏目。当滚动时,释放那些离开了屏幕区的栏目,同时添加新出现的栏目。
更多精彩
赞助商链接