c taskspawn 需要申请堆栈的大小 怎么设置_传说中的堆栈溢出

博客讲述了在iOS开发中遇到的子线程堆栈溢出问题,由于快速排序导致的Crash。分析了问题原因,发现是子线程默认堆栈大小较小。解决方案包括增大子线程堆栈大小和优化快速排序算法。同时,总结了预防堆栈溢出的方法和快速排序的优化策略。
摘要由CSDN通过智能技术生成

阅读本文大概需要3.0分钟

堆栈溢出和快速排序这两个概念对开发人员来说并不陌生,但是通知都只是听说过,真正开发过程中却很少会遇到。我也是敲代码好些行后非常有幸撞上了,而且还是两个一起出现的,这其中过程的滋味还是相当酸爽,值得回味。

问题背景:

某项目中有个POI离线检索功能,比如搜索附近的加油站,底层引擎逻辑提供了一个C函数。

输入:经纬点,搜索范围半径,搜索类别。

输出:按照距离由近到远排好序的POI结果列表。

这是一个C函数,是同步接口,所以我在OC 上层做了一次封装,改成了异步调用,在子线程中执行。

问题现象:

(1)如果搜索加油站,酒店等匹配结果数据较少的类型,功能正常;

(2)如果搜索饭店,酒店这种匹配结果较多的类型时,则会导致程序Crash。Crash时线程堆栈显示crash在搜索子线程,Crash对应的代码行不固定,每次crash时都不一样,略诡异,但是都是Crash在对搜索结果进行快速排序的那个快排函数中;

(3)如果我减少搜索范围的半径,再搜索饭店或者酒店时,功能又正常了。

问题分析:

(1)只有检索结果列表中元素比

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值