当前位置: 首页 > news >正文

说说Linux线程的栈空间

刚接触C编程时, 比较喜欢用局部变量, 因为局部变量是在栈上分配的,
会自动释放, 不会造成内存泄漏, 碎片什么的,觉得比malloc/new 出来的
堆内存好使多了,大家可能说malloc/new可以分配动态内存,其实linux/win32
的大多数平台提供了一个类似的函数alloca也可以来动态的分配栈内存。

 

栈变量正用得不亦乐乎的时候,悲剧发生了, 程序运行中老是出现莫名其妙的错误,
特别是Segmentation fault出现得尤其频繁。初步检查原因, 应该跟多线程有关,
最后总算查出了罪魁祸首:栈溢出!

 

程序的局部变量,用alloca分配的内存空间超出了栈空间的最大值,程序当然会死得很难看。
其实针对多线程程序来说,为了防止每个线程占用过多内存, 它们会被规定一个最大栈空间,
如果用户程序没有显式指定大小的话, 系统就会分配一个缺省值,这个值在不同的平台可能会
不一样,比如x86系统往往是10M, MIPS可能是8M, ARM一般是4M或者2M, 可以用ulimit命令查到。
但有一点需要注意,这个查到的栈空间是子线程的,主线程往往会比这个值大很多,

所以栈溢出一般都发生在子线程中。

 

由于有了栈溢出的风险, 所以大空间的局部变量,alloca的参数过大都是要避免的,
如果非得要用大内存,就请考虑堆空间吧!


相关文章:

  • linux中使用pthread_kill函数测试线程是否存活的例子
  • 在SharePoint中对文档库(列表)进行的一些操作
  • Linux下TCP keepalive心跳设置
  • 利用SQL存储过程创建交叉表
  • Program received signal SIGUSR1, User defined signal 1.解决方法
  • 在Linux中创建静态库.a和动态库.so
  • 弹出窗口中修改值数据后,父窗口中加载修改后的数据
  • makefile查找文件是否含某特定字符,若没有才添加;
  • makefile查找文件是否存在,不存在才拷贝;
  • 企业财务报表的分析方法(The analysis of financial statements)
  • c/c++经典面试题
  • 分形艺术 ---- 忘却记忆
  • char和unsigned char--数据类型区别
  • 一个电脑**和黑客的对话(笑死你)
  • Python使用Glob查找文件
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 《Java编程思想》读书笔记-对象导论
  • 0基础学习移动端适配
  • Effective Java 笔记(一)
  • gf框架之分页模块(五) - 自定义分页
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • jquery cookie
  • Linux各目录及每个目录的详细介绍
  • oldjun 检测网站的经验
  • Python学习之路13-记分
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React as a UI Runtime(五、列表)
  • SwizzleMethod 黑魔法
  • uva 10370 Above Average
  • VUE es6技巧写法(持续更新中~~~)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 大型网站性能监测、分析与优化常见问题QA
  • 高性能JavaScript阅读简记(三)
  • 基于webpack 的 vue 多页架构
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开源SQL-on-Hadoop系统一览
  • 离散点最小(凸)包围边界查找
  • 前端js -- this指向总结。
  • 使用SAX解析XML
  • 突破自己的技术思维
  • 我感觉这是史上最牛的防sql注入方法类
  • 【云吞铺子】性能抖动剖析(二)
  • MPAndroidChart 教程:Y轴 YAxis
  • 如何用纯 CSS 创作一个货车 loader
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #图像处理
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (C#)获取字符编码的类
  • (SpringBoot)第七章:SpringBoot日志文件
  • (八)Flask之app.route装饰器函数的参数
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (四)图像的%2线性拉伸
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程