在单元测试时,发现了比较多的线程堆栈空间不够导致 COREDUMP 的问题,这个问题的原因是由于线程独立拥有一个可配置大小的堆栈,一个线程内所有函数使用到的堆栈都依赖于这个栈,如果太多的变量、参数需要使用栈,可能 导致栈溢出从而COREDUMP。目前基础平台子系统通过配置环境变量,将默认堆栈大小设置为128K,可以减少这个问题的出现,但业务系统在编码时仍然 需要注意栈的使用,避免出现问题。

包括: 
    1、不要在函数内部定义过大的局部变量,如过大的结构体变量,联合变量,过大的字符串,数组等;
    2、函数调用的深度也需要注意,如果函数 A 调用 B, B 再调用 C,而A/B/C每个函数定义了 10 K的局部变量,则总的栈空间需求将超过 30K;
    3、不要直接将大的结构变量通过函数参数传递,这样也会消耗栈空间,可以通过指针或者引用的方式传递;
    4、在unit_test/callsvc 目录下提供了一个 rs 程序,可以 misc16_pkg.h 和 particle_stru.h 中结构局部变量的大小,如果一个函数中使用了这里边的结构定义局部变量,可以通过 “rs [变量类型] ”计算总的栈内存需求。建议每个函数内部定义的变量大小控制在4-8K以下;
    5、如果在运行中 COREDUMP,并且通过 GDB 的 WHERE 命令时看到刚进入某个函数就报错,连函数内的第一条调试语句都无法指向,则基本可以认为是栈空间不够导致的,可以尝试将栈空间配置大一点,如果问题不再出现,则可以确定问题。这时需要按照前面几点的要求修改代码,减少栈的使用。

关于线程堆栈大小的注意事项-转相关推荐

  1. 【Linux系统编程】线程堆栈大小的使用介绍

    先来讲说线程内存相关的东西,主要有下面几条: 进程中的所有的线程共享相同的地址空间. 任何声明为 static/extern 的变量或者堆变量可以被进程内所有的线程读写. 一个线程真正拥有的唯一私有储 ...

  2. 设置线程堆栈大小_哇擦,传说中的堆栈溢出和快速排序

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

  3. linux限制堆栈大小,进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?

    我在RHEL 6.3上运行了几个进程,但由于某种原因,它们超出了线程堆栈大小. 例如,Java进程在启动时在运行时被赋予-Xss256k的堆栈大小,并且在实际代码中使用pthread_attr_set ...

  4. 线程堆栈大小 pthread_attr_setstacksize 的使用

    pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下: # ulimit -s 8192 # 上述表示为8M:单位为KB. 也可以通过# ulimit ...

  5. 线程堆栈大小 pthread_attr_setstacksize 的使用【原创】

    author: 张继飞 pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下: # ulimit -s 8192 # 上述表示为8M:单位为KB. 也可 ...

  6. java改变线程堆栈大小,在运行时更新java线程的堆栈大小

    Does anyone know if there is a way to dynamically (runtime) increase the stack size of the main Thre ...

  7. android线程栈默认大小,线程的默认最大堆栈大小 - Internet Information Services | Microsoft Docs...

    在本机 IIS 进程中创建线程的默认最大堆栈大小为 256 KB 12/29/2020 本文内容 本文介绍由本机 IIS 进程创建的线程的默认最大堆栈Microsoft Internet Inform ...

  8. 【Linux系统编程】线程栈大小

    00. 目录 文章目录 00. 目录 01. 概述 02. 设置线程栈函数 03. 附录 01. 概述 先来讲说线程内存相关的东西,主要有下面几条: 进程中的所有的线程共享相同的地址空间. 任何声明为 ...

  9. java 栈 大小_java – JVM堆栈大小规范

    Question, what does 1 MB stack size states in JVM as I have no idea what size a stack frame of? 1 MB ...

最新文章

  1. 推荐 | Pair,医学图像标注神器
  2. 计时器Chronometer和时钟(AnalogClock和DigitalClock)
  3. 序列化技术的选型-技术层面
  4. 什么时候使用 InheritableThreadLocal
  5. Abp v2.8.0发布 路线图
  6. python drop_duplicates_Pandas drop_duplicates方法不起作用
  7. 哈希值之逆序数与变进制
  8. Android 四大组件学习之ContentProvider五
  9. Linux下部署Java,Tomcat环境
  10. 5.1、按键SW1控制LED1亮灭
  11. MATLAB-图像分割
  12. 南京服务器修复,南京戴尔服务器数据恢复
  13. Flex to Excel or Excel to Flex
  14. dnf锁定计算机,DNF老电脑福音 教你如何提升游戏流畅度
  15. 宇视NVR录像机,录像下载/回放提示“回放下载能力已达上线”如何解决
  16. 微博数据解析 | 可口可乐 VS 元气森林
  17. 【Linux】常用命令汇总
  18. 编写两个函数,分别求10个元素数组的最大和最小值的下标,并在main函数中运行,求出最大值和最小值之差
  19. 双非生源30%,计科评级“A-”,中南计算机性价比超高
  20. linux篇【3】:Linux 环境基础开发工具yum,vim,gcc,makefile,git

热门文章

  1. msdn安装后怎么用_Win10不好用?安装官方版精简Win10后,运行比win7更快更流畅
  2. 使用Event Bus模式解耦Android App组件间通信
  3. 一条SQL完成跨数据库实例Join查询
  4. 2.python数据结构的性能分析
  5. 关于lazyman你还应该知道这几件事
  6. Unity3d札记 --TanksTutorial收获与总结
  7. odoo 财务会计相关介绍
  8. 写一个方法,用一个for循环打印九九乘法表
  9. ophonesdn对首位优秀版主mobileguy的专访
  10. 话里话外:参展管理信息化年会 聚会谈咨询需求有市场