当您在一种允许对非常大的对象使用自动分配的语言中进行编程时,您何时以及如何担心堆栈大小?关于堆栈大小的推理有什么经验法则吗?
发布于 2009-12-17 03:28:46
在Symbian上玩了很多这个游戏:什么时候使用TBuf (堆栈上有存储的字符串),什么时候使用HBufC (它在堆上分配字符串存储,就像std:: string,所以你必须处理Leave,你的函数需要失败的方法)。
当时(也许现在我还不确定),Symbian线程默认有4k的堆栈。要操作文件名,您需要使用多达512个字节(256个字符)。
正如您可以想象的那样,公认的智慧是“永远不要将文件名放在堆栈上”。但实际上,事实证明,你可以比你想象的更多地逃脱惩罚。当我们开始运行真实程序(TM)时,比如游戏,我们发现我们需要比默认堆栈大小更多的东西,这不是由于文件名或其他特定的大对象,而是由于游戏代码的复杂性。
如果使用堆栈可以使您的代码更简单,并且只要您进行了正确的测试,并且不会完全过火(不要有多个级别的文件处理函数都将一个文件名放在堆栈上),那么我会说,试一试。尤其是当函数需要能够失败的时候,不管你使用的是栈还是堆。如果出现错误,您要么将堆栈大小加倍并在以后更加小心,要么在函数中添加另一个失败案例。世界末日也不是。
https://stackoverflow.com/questions/1915900
复制相似问题