C++ Symbian C+的内存管理实践和工具+;

C++ Symbian C+的内存管理实践和工具+;,c++,memory-management,symbian,s60,C++,Memory Management,Symbian,S60,我几乎已经完成了我的第一个Symbian应用程序,但是在我快速的学习过程中,我几乎没有注意到内存管理以及推送和清理堆栈 有人能告诉我一些在这里使用的最佳实践的方向吗,也许还有一些最好的泄漏检测/内存分析工具 例如,如果我在一个函数中获取了一个TDesC或TPtrC16,那么如何以最佳方式清理它们呢 TPtrC16 temp = ... temp.CleanupClosePushL(); CleanupStack::PopAndDestroy() …为了一切 谢谢,请原谅我,我是一个自认的Sym

我几乎已经完成了我的第一个Symbian应用程序,但是在我快速的学习过程中,我几乎没有注意到内存管理以及推送和清理堆栈

有人能告诉我一些在这里使用的最佳实践的方向吗,也许还有一些最好的泄漏检测/内存分析工具

例如,如果我在一个函数中获取了一个TDesC或TPtrC16,那么如何以最佳方式清理它们呢

TPtrC16 temp = ...
temp.CleanupClosePushL();
CleanupStack::PopAndDestroy()
…为了一切


谢谢,请原谅我,我是一个自认的Symbian n00b。

堆栈上存储的东西不需要存储在清理堆栈上(除非它们需要特殊处理(R类等,见下文))

清理堆栈用于在发生离开(认为异常)时删除对象,否则会泄漏内存

清理堆栈的实际使用是通过静态函数CleanupStack::PushL(..)和CleanupStack::Pop/popandestroy实现的

某些类(如RFile、RFs)必须关闭而不是删除,因此对于这些函数,调用了其::Close函数,因此您应该使用全局函数CleanupClosePushL(),它不是在休假时对对象调用delete操作符,而是调用类“::Close函数

要检查代码是否存在内存泄漏,可以使用宏标记;和uuheap_MARKEND ;;这将验证在这两个调用之间堆上没有留下任何内容

如果将cleanupstack上的任何内容保留在CActive的::RunL中,则活动计划程序将死机


作为一般技术,如果调用的函数可以离开,(由尾随的“L”表示),则必须将删除或关闭(或)等的任何内容添加到清理堆栈中。

< P>,需要花费10以下的页面才能正确地了解所有需要了解的Symbian C++的清理堆栈和内存管理。 无耻插头:这本书是专为你的N00B水平而写的:

我过去曾用于跟踪和调查内存泄漏。这不是最好的,但确实有帮助。此外,当您退出应用程序时,堆标记会在内存泄漏的情况下引发ALLOC恐慌。这些恐慌提供的信息几乎没有什么帮助,但它很好地表明某个地方存在内存泄漏。从这里开始,您可以使用HookLogger之类的工具来缩小代码泄漏的范围

我提到了一些Symbian资源。虽然所有这些对我都非常有用,但我确实觉得这本书非常有用。如果你能弄到手,我绝对推荐。这是一本快速阅读的书,但它出色地解释了这些概念,包括有关内存管理和描述符的内容