gpt4 book ai didi

iphone - 辅助线程的堆栈大小,DEBUG 和 RELEASE 版本之间的显着差异

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:57:45 24 4
gpt4 key购买 nike

在我的 iPhone 应用程序(XCode 3.2.4,iOS3.1.3)中,如果我在 RELEASE 模式下运行应用程序,一切都很好,但在 DEBUG 模式下,应用程序崩溃并出现 EXC_BAD_ACCESS 异常。该应用程序执行一些复杂的计算。所有主要代码都包含在几个 C++ 静态库中,UIApplication 仅从这些库之一创建对象并调用该对象的方法。

如果我将调用复杂计算的代码放入辅助线程,我仍然有相同的行为:在 DEBUG 模式下出现 EXC_BAD_ACCESS 异常,在 RELEASE 模式下没有问题。

然后我查看了线程堆栈大小。默认情况下,iOS 为辅助线程设置线程堆栈大小为 512 KB,为主线程设置为 1024 KB。我查看了线程堆栈大小所需的最小值以正确运行我的应用程序。我发现以下结果:RELEASE 版本为 40 KB。DEBUG 版本为 1168 KB。

DEBUG 版本中的值 1168 Kbytes 解释了为什么在主线程中,应用程序会崩溃(主线程的默认堆栈大小为 1024 Kbytes)。

我真的不明白为什么我的应用程序的 RELEASE 和 DEBUG 版本所需的线程堆栈大小如此不同(40 KB 与 1168 Kb !!!)。我需要任何帮助来理解这个问题。

谢谢。马克

最佳答案

调试版本的代码和库包含额外的自测试、额外的局部变量和验证并不罕见。也许这些正在增加您的代码的需求。

特别是,将一些缓冲区定义为局部变量并占用大量堆栈相对容易。你可能会在一个或多个占用堆栈的地方发现类似这样的东西:

#ifdef _DEBUG
testBuffer[bufferSize];
#endif

如果将“bufferSize”定义为 10K,那将用掉整个 40K 堆栈的 1/4。

或者也许一个仅调试功能使用大量堆栈。

也可能是您的调试版本的设置使用了任意数量的 Apple 测试设置。 MallocStack、GuardMalloc、NSZombiesEnabled 之类的东西需要更多内存。

关于iphone - 辅助线程的堆栈大小,DEBUG 和 RELEASE 版本之间的显着差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com