说说Linux线程的栈空间
来源:互联网 发布:在虚拟机中安装ubuntu 编辑:程序博客网 时间:2024/05/16 07:44
刚接触C编程时, 比较喜欢用局部变量, 因为局部变量是在栈上分配的,
会自动释放, 不会造成内存泄漏, 碎片什么的,觉得比malloc/new 出来的
堆内存好使多了,大家可能说malloc/new可以分配动态内存,其实linux/win32
的大多数平台提供了一个类似的函数alloca也可以来动态的分配栈内存。
栈变量正用得不亦乐乎的时候,悲剧发生了, 程序运行中老是出现莫名其妙的错误,
特别是Segmentation fault出现得尤其频繁。初步检查原因, 应该跟多线程有关,
最后总算查出了罪魁祸首:栈溢出!
程序的局部变量,用alloca分配的内存空间超出了栈空间的最大值,程序当然会死得很难看。
其实针对多线程程序来说,为了防止每个线程占用过多内存, 它们会被规定一个最大栈空间,
如果用户程序没有显式指定大小的话, 系统就会分配一个缺省值,这个值在不同的平台可能会
不一样,比如x86系统往往是10M, MIPS可能是8M, ARM一般是4M或者2M, 可以用ulimit命令查到。
但有一点需要注意,这个查到的栈空间是子线程的,主线程往往会比这个值大很多,
所以栈溢出一般都发生在子线程中。
由于有了栈溢出的风险, 所以大空间的局部变量,alloca的参数过大都是要避免的,
如果非得要用大内存,就请考虑堆空间吧!
- 说说Linux线程的栈空间
- 说说Linux线程的栈空间
- 线程的栈空间
- 线程的栈空间
- 说说 freemarker 的命名空间
- 深入理解linux下进程和线程的空间分配,进程栈和线程栈的空间分配
- 线程栈空间的大小
- 线程栈空间的大小
- js 删除QQ空间的说说
- 说说linux的磁盘分区吧
- 说说Linux下的sudo
- 简单说说android的线程封装
- 简单说说android的线程封装 zz
- 简单说说android的线程封装
- 简单说说android的线程封装
- 简单说说android的线程封装 zz .
- 简单说说Delphi中线程的释放
- 简单说说android的线程封装
- XAMPP的基本常见使用方法
- ModelSim错误:syntax error, unexpected "IDENTIFIER", expecting ".*" or '.'
- keyboard-interactive authentication with the ssh2 server failed
- Goole API
- 俄罗斯方块(C语言版)
- 说说Linux线程的栈空间
- MySQL
- 自定义getMode --- 将mode_t 转换为相应的字符串
- PBX的一些基础知识(持续更新中)
- Ubuntu配置tftp和nfs服务的步骤
- oracle查看表结构的几种方法
- 对于mysql数据库引擎myISAM不支持事务的了解
- 推荐5个免费项目管理工具
- 虚拟机Linux网络设置