一)概述

  .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储.

  .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说,内存是自动分配和释放的.

  .C/C++把存储在堆栈中的局部变量当作automatic存储,并使用auto关键字,这是局部变量的默认存储方式,所以现在没有人用auto关键词.

  .与动态存储相对映的静态存储,也就是用static定义的局部变量,它不用堆栈来存储,而是使用数据段来存储.

  .堆栈的基地址位于用户空间的最高虚拟地址附近,并从那里向下延伸.

  .一个进程开始时,堆栈的最大值就不能改变,如果占用的空间超过了堆栈大小,那么就会导致堆栈溢出.

  二)进程的内存组织形式

  进程被分为三个区域:文本,数据和堆栈.

  1)文本区域:

  文本区域也叫做代码段,是由程序确定的,它包括代码(指令)和只读数据,该区域通常被标记为只读,任何对其写入的操作会导致段错误.

  2)数据区域:

  数据区域也叫做数据段,它包括已初始化和未初始化的数据,静态变量存储在这个区域中,它的大小可以用系统调用brk(2)来改变.

  3)堆栈区域:

  堆栈区域也叫堆栈段,它用于给局部变量动态分配空间,同样函数传递参数和函数返回值也要用到堆栈.

  堆栈也可向下增长(向内存低地址)也可以向上增长,这依赖于具体的实现,通常都是向下增长的,而SP(堆栈指针)也是指向堆栈的最后地址.

  4)内存的分配区域:

  根据前面所述,堆栈是位于最高虚拟地址附近,而数据段则位于堆栈段之后,最后是代码段.

  三)堆栈着色

  当两个线程或进程使用相同的堆栈虚拟地址时,它们会争夺同一个cache行,导致竞争和降级行为.

  堆栈着色的技术使每一个进程的基址都不相同,通过随机分配堆栈基址,多个进程会使用不同的cache行来避免.

  四)堆栈的限制

  堆栈空间的最大值是由setrlimit系统调用确定的,也可以通过bash内建的ulimit命令来设定和查看.

  例如:

  查看当前可使用的最大堆栈(以KB为单位)

  ulimit -s

  8192

  设定为最大的使用堆栈为15KB

  ulimit -s 15

  此时执行ls将会得到一个段错误.

  ls -l /etc/

  total 1040

  Segmentation fault

  通过用strace跟踪ls命令,将发现有如下的系统调用

  getrlimit(RLIMIT_STACK, {rlim_cur=15*1024, rlim_max=15*1024}) = 0

  说明当前可用的堆栈空间,已经不足以运行strace命令了.

  五)常驻内存和锁定内存

  常驻内存专指存储在RAM中的内存部分,不包括存储在交换区和未存储的进程的内存.

  锁定内存是常驻内存的子集,它指被进程明确地锁定到RAM的虚拟内存中,不能用于交换,并一直常驻于RAM中.

转载于:https://blog.51cto.com/xuanjicto/725319

linux进程与它的堆栈空间相关推荐

  1. Linux 进程及进程之间的通信机制——管道

    参考: LInux C编程从初学到精通 电子工业出版社 Linux 进程 Linux 进程简介 Linux是一个多用户多任务的操作系统,多用户是指多个用户可以在同一时间使用同一台计算机系统:多用户是指 ...

  2. Linux 进程必知必会

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 只是简单的描述了一下 Linux 基本概念,通过几个例子来 ...

  3. linux进程管理 pdf,高效与精细的结合--Linux的进程管理.pdf

    高效与精细的结合--Linux的进程管理.pdf 第 卷 第 期 A 文献标识码 I T6L 76 28 L J6 7 8 676 LJ Q Q656 8J6 6 82 K 797863 R28J 2 ...

  4. Linux进程和线程

    程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. 1. 程序和进程 C.C ...

  5. linux进程家族树,Linux内核 | 进程管理

    作者:世至其美 博客地址:hqber.com 转载须注明以上信息, 更多文章,请访问个人博客:hqber.com 1. 进程和线程 1.1 定义 进程是处于运行状态的程序和相关资源的总称,是资源分配的 ...

  6. 睡眠排序算法c语言实现,Linux 进程必知必会

    只是简单的描述了一下 Linux 基本概念,通过几个例子来说明 Linux 基本应用程序,然后以 Linux 基本内核构造来结尾.那么本篇文章我们就深入理解一下 Linux 内核来理解 Linux 的 ...

  7. Linux进程原理及系统调用

    Linux进程原理及系统调用 进程 进程的生命周期 task_struct数据结构分析 进程优先级/系统调用 进程优先级 进程系统调用 内核线程 退出进程 进程 ​ 操作系统作为硬件的使用层,提供使用 ...

  8. linux进程操作相关函数,Linux进程控制简介与要素及相关函数详解

    进程是操作系统中的一个重要概念,它是一个程序的一次执行过程,程序是进程的一种静态描述,系统中运行的每一个程序都是在它的进程中运行的. 进程4要素 要有一段程序供该进程运行 进程专用的系统堆栈空间 进程 ...

  9. 一文搞定Linux进程和线程(详细图解)

    Linux 进程和线程 本篇文章我们就深入理解一下 Linux 内核来理解 Linux 的基本概念之进程和线程.系统调用是操作系统本身的接口,它对于创建进程和线程,内存分配,共享文件和 I/O 来说都 ...

最新文章

  1. AI一分钟|美团确认收购摩拜;特斯拉今年第一季度产量创历史新高
  2. 高并发C/S的TCP版本golang实现
  3. Python模拟删除字符串两边的空白
  4. asp和php功能,asp和php都有什么功能?
  5. python的exe缺少dll_python错误py2exe(缺少DLL)
  6. 【HTML+CSS网页设计与布局 从入门到精通】第14章-float/position/display属性
  7. 【微服务直播】60分钟掌握微服务治理之道
  8. PHP - 支付宝小程序授权登录
  9. 汇编语言视频教程 | 免费下载
  10. php去掉省市区,省市区后面的字符隐藏的php代码
  11. 最小生成树-普利姆和克鲁斯卡尔算法
  12. 解决页面间体验问题的纯前端容器Lath
  13. 又一巅峰!,Java开发实用必备的几款插件
  14. 贵州2021高考成绩排名查询,贵州高考排名查询方法,2021年贵州高考成绩位次全省排名查询...
  15. 微信ibeacon使用场景步骤总结
  16. 内网通讯工具都有哪些?
  17. 9008小米售后权限账号_小米救砖教程
  18. mysql mdl 锁_mysql原理 ~ 细说 MDL锁
  19. Java实现简单的日历打印
  20. chrome卸载之后再安装无法成功

热门文章

  1. 机器学习和图像资源整理
  2. 机器视觉 · 立体相机
  3. 【CV秋季划】图像质量提升与编辑有哪些研究和应用,如何循序渐进地学习好?...
  4. 全球及中国绿色建筑产业规模现状与未来走势分析报告2022版
  5. 如何把控产品 — 产品管理全流程解析
  6. VB 长整型和字节数组的转换问题 (LongByte)
  7. 济南长清区谋定特色展销中心 对话中国农民丰收节交易会
  8. SpringIOCAOP
  9. Web前端基础——HTML
  10. 查看php-fpm 占用内存情况