#include <string.h>
#include <stdio.h>
int main()
{
int a [10 * 1024 * 1024];
a[0] = 1;
return 0;
}
上面的代码运行就会crash。
原因:
ulimit -s
10240
可以看到linux配置的线程栈的大小为10M。
函数里面使用了两个大的数组,超出了linux线程栈大小配置的上限,而函数调用是需要栈的,当空间不足,导致越界,所以core掉。所以在函数中劲量少使用大的数据,而是使用堆分配内存。
为什么加上a[0] = 1;才会core,不加是不会core呢
因为在linux中,只有在使用时候才会分配内存,如果没有a[0]=1;并不会在栈上为a数组分配内存,所以不会导致core掉。
可以使用pmap工具来查看地址空间的分配状况。
附:使用inline时,最后不要在inline函数中申请大的数组,不然很容易出问题。
作者:翁志艺
分享到:
相关推荐
---------------------------------------------------Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
linux协议栈,介绍协议栈的实现在linux中 linux协议栈,介绍协议栈的实现在linux中
本文描述LinuxNPTL的线程栈简要实现以及线程本地存储的原理,实验环境中Linux内核版本为2.6.32,glibc版本是2.12.1,Linux发行版为ubuntu,硬件平台为x86的32位系统。b.对于LinuxNPTL线程,有很多话题。本文挑选了...
Linux下函数栈大小的自动计算技术.pdf
Linux协议栈实现分析 Linux协议栈实现分析
注:本文所涉及的环境为Linux,下文讨论的栈跟内核栈,没有任何的关系 这里有如下几个问题,线程栈的空间是开辟在那里的? 线程栈之间可以互访吗?为什么在使用pthread_attr_setstack函数时,需要设置栈的大小,...
实现关于在linux多线程环境中,对当前多线程进行栈的打印。
介绍了linux线程同步的所有方式,包括互斥、自旋、信号量、条件变量等技术
Linux线程,多线程编程,线程使用,线程间通讯
Linux下的段错误产生的原因及调试方法
Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程
Linux协议栈源码分析.rar Linux协议栈源码分析.rar
TCP/IP linux 协议栈 线程 进程
超多的linux线程编程的书籍超多的linux线程编程的书籍
linux IP协议栈原理,主要是函数的功能介绍与系统流程
九、线程栈末尾的警戒缓冲区大小 18 第三章 Posix有名信号灯 19 一、posix有名信号灯函数 19 二、关于posix有名信号灯使用的几点注意 24 三、posix有名信号灯应用于多线程 25 四、posix有名信号灯应用于多进程 27 五...
详细的介绍了Linux下线程的概念,加深对线程的理解。