Linux进程栈和线程栈
来源:互联网 发布:与朋友交而不信乎的与 编辑:程序博客网 时间:2024/06/14 09:59
总结:
1、进程主线程的栈大小是在进程执行的时刻才能指定的,即不是在编译的时候决定的,也不是在链接的时候决定的
2、进程主线程的栈大小是随机确定的至少比线程栈要大,但是不到线程栈大小的2倍 (ulimit -s 查询到的是线程的栈大小,)
3、线程栈大小是固定的,也就是ulimit -a 显示的值
4. 线程的栈大小, 不是从进程主线程栈大小里面分配的。 也就是说 N个线程的栈大小 可以大于 进程主线程栈大小。
查看线程栈大小:
可以看到默认情况下线程栈大小为8192(8MB),可以使用ulimit -s xxx修改线程默认栈大小
(1)检查线程栈默认大小(8KB)
线程执行2030次之后,出现段错误(2030*4K=8120K)
(2)修改栈大小,使用pthread_attr_setstack()
如上修改栈大小为16MB,其中线程栈的空间从堆中进行分配
程序执行4063次后出现段错误(4063*4KB)
(3)创建两个线程,使用默认栈大小执行
创建两个线程,默认单个线程栈大小为8M
执行结果1:程序执行4009次之后段错误(4009*4KB)
执行结果2:程序执行3380次之后段错误(3380*4KB)
总结:
两个线程时,两个线程栈的总和不是固定值,也不是线程栈的2倍
(3)不使用任何线程
执行结果1:程序执行2538次后段错误(2538*4KB)
执行结果2:程序执行2537次后段错误(2537*4KB)
总结:
进程的栈大小不是固定的,而是比线程栈大一些
(4)线程栈从进程栈中分配
执行结果1: 程序执行2536次后段错误(2536*4KB>8M)
执行结果2:程序执行2537次后段错误(2537*4KB>8M)
总结:
线程从进程栈分配空间,大小并不是固定的,如果分配空间大于进程栈空间,那么直接运行时出现段错误。
关于进程栈和线程栈总结:
(1)进程栈大小时执行时确定的,与编译链接无关
(2)进程栈大小是随机确认的,至少比线程栈要大,但不会超过2倍
(3)线程栈是固定大小的,可以使用ulimit -a 查看,使用ulimit -s 修改
- Linux进程栈和线程栈
- linux进程和线程
- Linux进程和线程
- linux进程和线程
- Linux 线程和进程
- Linux进程和线程
- Linux进程和线程
- linux进程和线程
- linux -- 进程和线程
- Linux 进程和线程
- linux线程和进程
- Linux 进程栈和线程栈的区别
- Linux 进程栈和线程栈的区别
- Linux 进程栈和线程栈的区别
- 进程,线程,堆和栈...
- 深入理解linux下进程和线程的空间分配,进程栈和线程栈的空间分配
- 进程内核栈、用户栈及 Linux 进程栈和线程栈的区别
- linux进程和线程编程
- 分布式事务架构的五大演进 ,以交易系统为例
- 完全跨站点跨域名单点(SSO)同步登录和注销
- 深入理解Android L新特性之 页面内容&共享元素过渡动画
- Spring AOP ,面向切面
- vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
- Linux进程栈和线程栈
- threejs系列教程
- C# MQ操作
- 深入浅出LinkedList与ArrayList
- 2018网易游戏校招笔试题
- (superpixel)超像素分割
- 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)
- POJ 1755-Triathlon(半平面交-铁人三项)
- Greenplum gpdbrestore 全量恢复