社区
C++ 语言
帖子详情
问个关于进程的比较傻的问题吧
gattuso8
2008-11-28 01:49:38
程序运行过程中,内存分成5个区,
堆、栈、自由存储区、静态存储区和常量存储区。
那么这五个区对进程而言是什么样子的呢?
1。每个进程都有自己独立的五个区,
还是仅仅五个区只是逻辑上属于某个进程呢?
2。对于一个进程而言,量级上,这五个区是什么样子的呢?
...全文
118
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
打赏
举报
回复
果真存在这个的分区?
彻底理解操作系统:2,
进程
?程序?
傻
傻
分不清
到目前为止,你肯定已经见过很多次这两个词了,“程序”“
进程
”。那程序和
进程
到底有什么区别呢。 程序是一个静态的概念。
进程
是一个动态的概念。 我们用一个例子来形象的讲解一下这个区别。 程序其实本质上和我们...
【Linux】详解
进程
状态之僵尸
进程
——孤儿
进程
详解
进程
状态
进程
、线程与协程
傻
傻
分不清?一文带你吃透!
前言欢迎来到操作系统系列,依然采用图解 + 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门本篇开始介绍
进程
、线程、协程,相信很多小白们对这几个概念理解的不清晰,这里全部给你们安排...
程序
进程
线程,
傻
傻
分不清楚
什么生物会问这种奇葩的
问题
a?(久66答:面试官)好吧,我基础不牢也不是什么众所周知的事了,该补补课看看什么是程序,还有(老是跟它形影不离的)
进程
和线程。看书是不可能看的,找了下北航康师傅的视频吸收一下...
进程
互斥的实现方法
当有两个及以上的
进程
(几个便秘人)想要访问资源时(马桶),必须要排队,一个一个的访问,不能两个人一起进去,会发生意外。这是因为在同一个时间段内,一个资源只能由一个
进程
所访问。 设置一个循环条件,若
进程
...
C++ 语言
64,647
社区成员
250,496
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章