2012-09-26 29 views
0

我为电信应用产品工作。在过去的几天里,我的C++代码遇到了一个问题。我有一项任务让产品在HP server with RHEL(红帽企业Linux)操作系统上工作。而且我面对着应用程序的每一个流程的核心转储。每个核心转储出于某种未知原因而导致堆栈损坏。但是相同的代码在Windriver 2.0 as well as 4.0上正常工作。然而,在做一些r & d我从10MB to unlimited增加堆栈大小,现在我不再看到核心转储。但windriver甚至可以在8MB下正常工作。我认为它的一些编译器的具体问题。如果有人提出这个问题,这将有很大的帮助。编译器特定的核心转储

+0

你是否可以用一些操场代码重现这种行为?真实世界的应用程序通常太复杂,无法确定问题出在哪里。如果您有源代码,请创建它的新副本并开始删除/评论代码。我认为你很快找到了对此负责的部分代码。 – izidor

+0

当然,我会尝试@izidor。但我怀疑它是编译器问题,而不是代码问题,因为代码在实时系统上运行良好。由于编译器具有不同类型的优化方案,因此可能会通过一些特定的编译选项来解决此问题。 –

回答

0

似乎编译器,你需要设置堆栈大小无限上使用更多的堆栈空间,然后Windriver。考虑到堆栈的使用高度依赖于编译器的优化,这并不是一个大惊喜。内联函数可以减少堆栈使用情况。