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

2024-01-10

在我的 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 KB 解释了为什么在主线程中应用程序会崩溃(主线程的默认堆栈大小为 1024 KB)。

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

谢谢。 马克


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

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

#ifdef _DEBUG
   testBuffer[bufferSize]; 
#endif

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

或者,仅调试函数可能会使用大量堆栈。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

辅助线程的堆栈大小,DEBUG和RELEASE版本差异显着 的相关文章

  • iOS 确定视频中的帧数

    如果我有一个 Swift 中的 MPMoviePlayerController MPMoviePlayerController mp MPMoviePlayerController contentURL url 有没有办法获取视频中的帧数u
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • OpenGL-ES、iPhone 和间歇性错误:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES (0x8CD6)

    我有一个在 UIView 中使用 OpenGL ES 和 EAGLContext 的应用程序 非常类似于 Apple 的 GLPaint 示例代码应用程序 我在 iPhone 4 上看到这个错误 但在 iPad 上却没有 这可能很重要 大多
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • C++11 非阻塞生产者/消费者

    我有一个 C 11 应用程序 其中有一个生成数据的高优先级线程和一个消耗数据的低优先级线程 在我的例子中 将其写入磁盘 我想确保高优先级生产者线程永远不会被阻塞 即它仅使用无锁算法 使用无锁队列 我可以从生产者线程将数据推送到队列 并从消费
  • iOS 7 NS 单线程安全合并冲突

    重新排序两行后 在单线程应用程序上保存简单的数据时遇到问题 我已经成功地简化了编码以重现错误 并且希望其他人尝试这一点时得到第二个意见 这是一次健全性检查 因为我怀疑 iOS 7 引入的核心数据问题 而这在 iOS 6 中工作正常 首先 启
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • 如何订阅设备方向(非界面方向)事件?

    在我的应用程序中 我想在设备旋转 方向更改 的情况下调用 CCScene myscene 中的某些方法 我禁用了自动旋转 因为我希望它不会发生 问题是 我想根据我的设备方向改变场景中的重力 我的代码 void onEnter super o
  • iPhone Dev:从子控制器和 TabBar 中的另一个控制器重新加载表视图的数据

    我正在实现一个笔记管理器应用程序 它在 tabBar 中有一个 tableView 其中显示其笔记的主要信息 访问一个注释时 您可以编辑其属性 在 tabBar 的一个按钮中 您可以选择注释在 tableView 中的显示方式 我遇到的问题
  • 使用 Dirac 在 iPhone 中进行实时音高变化 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的实时音调变换 https stackoverflow com questions 1100495 real time pitch shifting on the iphone 我已经
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T
  • 如何检测 UITableView 中某个单元格的双击?

    如何检测某个单元格上的双击UITableView i e 如果用户进行了一次触摸 我想执行一个操作 如果用户进行了两次触摸 我想执行另一个操作 我还需要知道进行触摸的索引路径 我怎样才能实现这个目标 Thanks 如果您不想创建子类UITa
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空
  • 如何制作像 Facebook 应用程序一样的登录屏幕?

    如何制作像 Facebook 应用程序一样带有 电子邮件 和 密码 文本字段的登录屏幕 Facebook登入 http extdesenv com wp content uploads 2012 05 facebook login ios
  • 刷新单元格的 UITableView 队列

    我想知道如果调用 UITableView reloadData 时 UITableView 队列被刷新 是否有人可以回复我 我正在尝试这样做 但这对我没有帮助 有什么建议吗 如果你查看 UITableView 的头文件 你可以看到有一个名为

随机推荐

  • 如何使用 JavaScript 将输入字段设置为只读?

    我知道你可以添加readonly readonly 到输入字段 因此它不可编辑 但我需要使用 javascript 来定位输入的 id 并将其设置为只读 因为我无权访问表单代码 它是通过营销软件生成的 我不想禁用输入 因为应在提交时收集数据
  • 在Webview中使用PDFJS库在Javafx中显示Pdf

    我的目标是在我的 JavaFX 应用程序中显示 pdf 文档 经过研究 我发现了 Mozilla 的 PDFJS 库 发现它非常有用 我正在做的是从 JAVA 读取 PDF 文件作为字节数组 并在 Web 视图中调用 js 代码 这是代码
  • 以点开头的行是什么意思?

    我正在阅读巧手教程 http craftyjs com tutorial bananabomber create a game并遇到了一个我找不到文档的代码片段 搜索标点符号太难了 有问题的行 11 和 12 遵循Crafty e行并开始于
  • Material UI 的 Snackbar 不向下滑动

    我在用Material UI第一次并尝试实施SnackbarAPI 发布成功 我希望 Snackbar 在 Enter 时向上滑动 然后在 Exit 时向下滑动 我能够实现在 Enter 时向上滑动 但需要 在退出时向下滑动 的帮助 谁能帮
  • 安装和使用 PIL-Python 成像库的过程是什么?

    我尝试使用 pip 安装 PIL 它给了我这个错误 C Users AppData Local pip gt pip 安装http effbot org downloads Imaging 1 1 6 tar gz http effbot
  • 为什么当我指定 -ErrorAction SilentlyContinue 时仍然显示错误?

    PS C Users ad ctjares gt Stop Transcript ErrorAction silentlycontinue Transcription has not been started Use the start t
  • Docker 化您的 Angular NodeJS 应用程序

    我们有一个前端应用程序 它是用 Angular html css javascript 编写的 需要由网络服务器 nginx 托管 Angular 正在与 NodeJs 服务器通信 该服务器将与后端通信 现在我们必须在 Docker 中运行
  • 如何将运送区域名称添加到 WooCommerce 管理订单列表中的新列

    我想在 WooCommerce 的订单概览中显示送货区域名称 这显示了订单概览 这显示了我要显示的运送区域名称 我读过 我可以使用自己的插件来完成此操作 尝试过但失败了 或者在我的函数中使用过滤器 我找到了这个过滤器 可以将日期添加到同一订
  • Windows Phone7:单击按钮打开网页?

    我刚刚搜索 但没有找到在我的 Windows Phone7 应用程序中创建 Web 链接的方法 在Android中TextView有android autoLink Web 在 Windows Phone7 文本块中我没有找到任何相关属性
  • Linux 用户空间 ELF 加载器

    我需要做一件相当不寻常的事情 手动执行 elf 可执行文件 IE 将所有部分加载到正确的位置 查询 main 并调用它 然后进行清理 可执行文件将被静态链接 因此不需要链接库 我还控制基地址 所以不用担心可能的冲突 那么 有没有相关的库呢
  • 安装 Bison 后出现“make: yacc: Command not found”

    在 gcc 4 1 2 linux 5 中运行 makefile 时 出现以下错误 make yacc Command not found 通过谷歌搜索 我了解到可以通过安装 Bison GNU 解析器生成器来纠正此错误 但即使安装了 Bi
  • 文本框的值消失 - 将视图模型绑定到选项卡(内容控件)

    基于MVVM 示例 http msdn microsoft com en us magazine dd419663 aspx作者 Josh Smith 我实现了多选项卡选项 该选项将不同的选项卡绑定到不同的视图模型 使用将视图模型绑定到视图
  • 如何将终端作为侧栏旁边的列移动?

    今天 4 02 22 之后 VSCode 在更新 1 64 0 中引入了 侧面板 它应该提供更多的灵活性等 但就我而言 它实际上破坏了我的布局并采用了我正在使用的选项 我有我的布局 代码 终端 侧边栏 每个都在一列中 现在我无法将终端移动到
  • 如何在SQL Server中删除触发器?

    我需要删除 SQL Server 中的触发器 看起来应该很简单 但是因为有一种称为 删除触发器 的东西 即在删除时调用的触发器 所以似乎不可能找到有关如何实际删除已存在的触发器的资源 跌落触发器 http msdn microsoft co
  • 在SQL中计算给定月份的第一个工作日

    我必须计算每月前 N 天内已支付的所有发票 我有两张桌子 INVOICE 有发票信息 唯一重要的字段称为 datePayment HOLYDAYS 这是一个单列表 该表中的条目的格式为 2009 01 01 2009 05 01 等 我还应
  • php exec() 在 unicode 模式下?

    我需要执行接受 ut8 作为输入或生成 ut8 输出的命令行命令和工具 所以我使用 cmd 它可以工作 但是当我用 exec 从 php 尝试这个时 它不起作用 为了简单起见 我尝试了简单的输出重定向 当我直接在命令提示符下写入时 chcp
  • 检查默认java安装版本是否大于1.x的DOS脚本

    正如主题所说 我需要一个dos脚本来检查windows xp机器上安装的java版本 此外 我需要检查版本是否大于前缀值 1 x 有人可以帮助我吗 Thanks 获取版本 并将其写入临时文件 然后只解析版本本身 echo off echo
  • 重播 vim 宏直到缓冲区结束

    我想运行一个我刚刚在寄存器中录制的宏 x 在 vi m 中打开缓冲区的每一行上 从光标到缓冲区末尾 我该怎么做 我知道我可以重放宏 n 次 15 x 或者按住 直到我到达最后一行 但我只想敲击几个键就可以完成它 就我个人而言 我会做 VG
  • Javascript:for循环属性内的条件递增或递减

    我知道我可以执行 IF ELSE 但我需要知道是否可以设置条件循环 如下所示 for i 0 i
  • 辅助线程的堆栈大小,DEBUG和RELEASE版本差异显着

    在我的 iPhone 应用程序 XCode 3 2 4 iOS3 1 3 中 如果我在 RELEASE 模式下运行应用程序 一切都很好 但在 DEBUG 模式下 应用程序会崩溃并出现 EXC BAD ACCESS 异常 该应用程序会执行一些