博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程中内存地址空间的划分
阅读量:6451 次
发布时间:2019-06-23

本文共 1278 字,大约阅读时间需要 4 分钟。

void fcn(int A, int B){    int C;    int D;}
高地址 命令行参数信息,环境表信息
: 栈Stack for thread 0:一个线程一个私有栈
: 栈里的栈帧Stack Frame 0:一个函数里的局部变量一个栈帧
: 栈里的栈帧Stack Frame 1:设这个是fcn(),依次将BACD压入栈
: ::::
: 映射区
: ::::
: 堆Heap:用户自己分配内存
: BSS(Data):global,static数据
: 全局区/数据区(Data):initialized global, static数据
: 只读常量区(Text):const initialized global, static数据
低地址 代码区(Text):存储二进制指令

Note:

  1. BSS段(Data)会在main函数执行之前自动清零没有初始化的g_var此时被初始化
  2. 堆区(Heap)中的内存空间由程序员手动申请以及手动释放, 该区域中的内存空间由OS自动管理
  3. 一个进程一个堆,堆≈虚拟物理内存-1GB,
    一个线程一个栈,栈通常为4MB
    堆的大小实际上(运行时)动态变化的,但有理论最大值,理论上虚拟内存有多大,就可以(近似)建多大,但32位的程序在64位系统上运行的时候,一个进程的堆大小应该是不可以超过4G的.
    栈大小固定(编译时确定),linux系统下默认栈大小是10M,windows系统下默认栈大小是1M,当然了,都是虚拟的
  4. stack frame VS program stack VS heap=>the program stack is an area of memory that supports the execution of functions and is normally shared with the heap—they share the same region of memory , the program stack tends to occupy the lower part of this region ,while the heap uses the upper part.The program stack holds stack frames(栈桢), sometimes called activation records or activation frames. Stack frames holds the paramaters and local variables of a function. Local variables are also called automatic variables。 They are always allocated to a stack frame
  5. ANSI C编程可以使用malloc()/free()进行动态内存分配,Unix/Linux平台还可以使用sbrk()/brk(),mmap()/mumap()

转载地址:http://pcgwo.baihongyu.com/

你可能感兴趣的文章
**iOS发JSON请求中字符串加转义,返回的JSON去转义
查看>>
Codeforces Round #299 (Div. 2) A. Tavas and Nafas 水题
查看>>
listview去掉底部多出的边框黑色
查看>>
spring4.x注解概述
查看>>
我们通过一个服务器程序,以研究backlog参数对listen系统调用的影响,运行截图如下...
查看>>
查看实时公网ip
查看>>
STM32硬件调试详解
查看>>
js判断是否在微信浏览器中打开
查看>>
正則表達式匹配换行符
查看>>
没有找到MSVCR100.dll解决方法
查看>>
统计搜索引擎的每小时抓取量及首页抓取量(第一版)
查看>>
[LeetCode] Surrounded Regions 包围区域
查看>>
查看nginx的版本
查看>>
php:的图形计算器的面向对象的版本武器2
查看>>
hdu 5463 Clarke and minecraft(贪心)
查看>>
操作系统学习笔记_10_文档管理 --文件系统
查看>>
Bootstrap table
查看>>
MySQL----数据的显示位宽
查看>>
PHP中的命名空间(namespace)及其使用详解
查看>>
SQL Server中的事务日志管理(5/9):完整恢复模式里的日志管理
查看>>