社区
C++ 语言
帖子详情
问个关于进程的比较傻的问题吧
gattuso8
2008-11-28 01:49:38
程序运行过程中,内存分成5个区,
堆、栈、自由存储区、静态存储区和常量存储区。
那么这五个区对进程而言是什么样子的呢?
1。每个进程都有自己独立的五个区,
还是仅仅五个区只是逻辑上属于某个进程呢?
2。对于一个进程而言,量级上,这五个区是什么样子的呢?
...全文
138
17
打赏
收藏
问个关于进程的比较傻的问题吧
程序运行过程中,内存分成5个区, 堆、栈、自由存储区、静态存储区和常量存储区。 那么这五个区对进程而言是什么样子的呢? 1。每个进程都有自己独立的五个区, 还是仅仅五个区只是逻辑上属于某个进程呢? 2。对于一个进程而言,量级上,这五个区是什么样子的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gattuso8
2008-11-30
打赏
举报
回复
谢谢大伙。。。
nj_dobetter
2008-11-28
打赏
举报
回复
你说的这几个段是程序员可以理解的几个段,程序员可以给代码分段;
段页式内存管理,分段面向程序员,分页面向硬件和操作系统(页对程序员不可见)
gattuso8
2008-11-28
打赏
举报
回复
[Quote=引用 14 楼 xhs_lh04 的回复:]
不是这样理解
是给进程的虚拟空间4G,这其中有1G的系统空间,3G的用户空间,呵呵这是LINUX的,WINDOWS我不知道了
[/Quote]
哦 一个进程的理论空间哈
xhs_lh04
2008-11-28
打赏
举报
回复
不是这样理解
是给进程的虚拟空间4G,这其中有1G的系统空间,3G的用户空间,呵呵这是LINUX的,WINDOWS我不知道了
gattuso8
2008-11-28
打赏
举报
回复
[Quote=引用 11 楼 xhs_lh04 的回复:]
有些操作系统是可以调整堆栈的大小的,比如HP-UX
一般是多少限制,不好说对一个进程来说代码段上来是数据段,再上来是未用的,最上面才是栈区,栈是从上往下长,数据区是从下往上长,两个要碰到了,就到了堆栈的最大限了,
[/Quote]
谢拉!
gattuso8
2008-11-28
打赏
举报
回复
[Quote=引用 7 楼 xhs_lh04 的回复:]
这个问题扩展起来回答挺费劲的
我们先来看看执行文件的格式
通常计算机目标文件有三种格式可重定位的目标文件:包含二进制代码和数据,与其他可重定位目标文件合并起来,创建一个可执行目标文件。可执行的目标文件:包含二进制代码和数据,其形式可以被直接拷贝到存储器中并执行,共享目标文件:一种特殊的可重定位目标文件,即我们通常所说的动(静)态链接库
可重定位的目标文件格式,大概的,记的不是很清
节头部表
.s…
[/Quote]
另外进程在虚拟空间又分为用户空间(3G)跟系统空间(1G),并不仅只是楼主提到的上面5个区,这5个区仅指代码中变量的存储区域而已
------------------------------------
可以理解为
一个个进程 分别站用了用户空间的一部分吧?
xhs_lh04
2008-11-28
打赏
举报
回复
有些操作系统是可以调整堆栈的大小的,比如HP-UX
一般是多少限制,不好说对一个进程来说代码段上来是数据段,再上来是未用的,最上面才是栈区,栈是从上往下长,数据区是从下往上长,两个要碰到了,就到了堆栈的最大限了,
gattuso8
2008-11-28
打赏
举报
回复
[Quote=引用 9 楼 xhs_lh04 的回复:]
引用 8 楼 gattuso8 的回复:
俺是楼猪
1 到底是三种 还是五种呢
是不是只是讲法不同?
自由存储区、静态存储区和常量存储区 听着在实际物理内存里 好象差不多
2 比如进程的栈 是不是进程在启动时直接分配了一定数量,需要时系统在继续分配呢。。。
1.C++通常说法是你最早提到的5种
2.不是实际物理内存,OK,实现物理内存里不分分出5个区域里给你放这种东西,是分配的连续虚拟页面,可能是物理内存里,也有可能不在
…
[/Quote]
1 物理内存的说法确实不太贴切
2 我试了一下 楼上描述的比较贴切
使用疯狂嵌套的方法调用函数 调用到一万多次时栈益处
而疯狂分配内存到是不会产生崩溃
估计进程栈应该是没法动态增加的
3 进程栈一般多大啊 能否给给量级?
xhs_lh04
2008-11-28
打赏
举报
回复
[Quote=引用 8 楼 gattuso8 的回复:]
俺是楼猪
1 到底是三种 还是五种呢
是不是只是讲法不同?
自由存储区、静态存储区和常量存储区 听着在实际物理内存里 好象差不多
2 比如进程的栈 是不是进程在启动时直接分配了一定数量,需要时系统在继续分配呢。。。
[/Quote]
1.C++通常说法是你最早提到的5种
2.不是实际物理内存,OK,实现物理内存里不分分出5个区域里给你放这种东西,是分配的连续虚拟页面,可能是物理内存里,也有可能不在
3.另一开始就规划好了栈底的位置,栈顶的位置根据入栈/出栈操作而改变,但它的大小是有限制的
gattuso8
2008-11-28
打赏
举报
回复
俺是楼猪
1 到底是三种 还是五种呢
是不是只是讲法不同?
自由存储区、静态存储区和常量存储区 听着在实际物理内存里 好象差不多
2 比如进程的栈 是不是进程在启动时直接分配了一定数量,需要时系统在继续分配呢。。。
xhs_lh04
2008-11-28
打赏
举报
回复
这个问题扩展起来回答挺费劲的
我们先来看看执行文件的格式
通常计算机目标文件有三种格式可重定位的目标文件:包含二进制代码和数据,与其他可重定位目标文件合并起来,创建一个可执行目标文件。可执行的目标文件:包含二进制代码和数据,其形式可以被直接拷贝到存储器中并执行,共享目标文件:一种特殊的可重定位目标文件,即我们通常所说的动(静)态链接库
可重定位的目标文件格式,大概的,记的不是很清
节头部表
.strtab //一个字符串表,其内容包含.systab和.debug节中的符号表
.line //原始C程序的行号和.text节中机器指令之间的映射
.debug //调试信息.如-g编译出来的
.rel.data //被模块定义和引用的任何全局变量的信息
.rel.text //不清楚了,记不得了,抱歉
.symtab //符号表,存放在程序中被定义和引用的函数和全局变量的信息
.bss //未初始化的全局变量
.dataa //已初始化的全局变量
.rodata //只读数据,如pintf和switch语句中的字符串和常量值
.textt//已编译程序的机器代码
ELF头
内核在load二进制文件时会将ELF读入,并分配页面(虚拟4G空间),并初始化进程页面,页面最高作为进程的堆栈区,从高(栈底)往下(栈顶)
这些区域当然都是逻辑的,并没有在内存中有明显的区域划分,但是内核限制,会有些判断来判定是否栈区大小超界
另外进程在虚拟空间又分为用户空间(3G)跟系统空间(1G),并不仅只是楼主提到的上面5个区,这5个区仅指代码中变量的存储区域而已
哎,这种问题说起来话长,说了半天也没感觉说到点子上
呵呵,有空看看内核方面的书
whsfer
2008-11-28
打赏
举报
回复
冒似只有三个区:静态存储区,动态堆存储区,动态栈存储区。
本人感觉界限不应该分太清,因为有的进程要调用其他进程的函数或者变量。
ARLENE_YANG
2008-11-28
打赏
举报
回复
UP
DarknessTM
2008-11-28
打赏
举报
回复
进程间自然都是独立的
进程内部的话,堆是共享的,栈是各个线程独立的
zhanshen2891
2008-11-28
打赏
举报
回复
准确的说是可用内存只有堆和栈,各个进程是独立的,初始化系统给你分配一块,可以动态改变大小,你写用户代码就这么认为。
就呆在云上
2008-11-28
打赏
举报
回复
每个程序都有自己的一份空间,包括你说的5个区
应该是逻辑上的吧
具体的空间分配可以google一下,我也不记得了
下楼的顶起
hhyttppd
2008-11-28
打赏
举报
回复
果真存在这个的分区?
面试必问
问题
之多
进程
与多线程的区别(超详细)
本文深入探讨了
进程
和线程的概念,解释了为什么引入
进程
和线程,详细介绍了多
进程
和多线程的原理,以及它们之间的区别。并通过类比生动地阐述了多
进程
和多线程的选择策略。
线程与
进程
的
比较
博客从调度基本单位、并发性、拥有资源、独立性、系统开销和支持多处理机系统6个方面,对线程与
进程
的区别进行了
比较
。如线程是资源调度基本单位,开销小;
进程
可拥有资源,开销大等。
进程
和线程的
比较
本文详细讲解了Linux中查看
进程
和线程的方法,包括
进程
和线程的区别、Linux最大
进程
数和线程数的设置,以及如何通过代码实例和工具如jstack排查CPU占用过高的
问题
。还讨论了上下文切换对多线程性能的影响和分析方法。
duang!各位期待的
傻
猴更新稳定版来了~
傻
猴自动化测试工具新增运行时间、任务删除等功能,解决app50+
问题
,包括
进程
被杀、报告显示异常等。适用于Android自动化测试,提升测试效率。
去面试H5游戏问的一些
问题
这篇博客详细列举了H5游戏面试中可能会遇到的
问题
,包括WebSocket与Socket的区别,Http与Https的差异,
进程
和线程的概述,H5渲染流程,性能优化策略,以及游戏引擎如cocos、laya、egret的优缺点等。同时,还涉及了面试中关于个人技能、项目经验和技术理解的常见
问题
。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章