Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是什么决定了进程在内存中的结构?

是什么决定了进程在内存中的结构?
EN

Stack Overflow用户
提问于 2015-09-05 12:43:48
回答 3查看 475关注 0票数 1

我了解到一个进程在内存中具有以下结构:

(图片来自操作系统概念,第82页)

然而,我并不清楚是什么决定了一个流程是这样的。我猜进程可以(并且是这样做的?)如果你看一下非标准的操作系统/架构,看起来会有所不同。

这种结构是由操作系统决定的吗?被程序的编译器?通过计算机体系结构?它们的组合?

EN

回答 3

Stack Overflow用户

发布于 2019-04-19 18:27:58

相关的和可能的重复:Why do stacks typically grow downwards?

在一些ISA(如x86)上,会出现一个向下增长的堆栈。(例如,call在推送返回地址之前会递减SP/ESP/RSP,而异常/中断会将返回上下文推送到堆栈上,因此即使您编写了避免call指令的低效代码,您也无法避免使用至少内核堆栈的硬件,尽管用户空间堆栈可以做您想做的任何事情。)

在其他情况下(比如没有隐式堆栈使用的MIPS ),这是一种软件约定。

布局的其余部分由此而来:您希望在堆栈向下增长和/或堆增长向上发生冲突之前,为它们提供尽可能多的空间。(或者允许您对他们的增长设置更大的限制。)

根据操作系统和可执行文件格式的不同,链接器可能会选择布局,比如文本位于BSS之上还是之下以及读写数据。OS的程序加载器必须考虑链接器请求加载部分的位置(至少对于支持静态代码/数据/BSS的ASLR的可执行文件而言是相对的)。通常,这类可执行文件使用PC相对寻址来访问静态数据,因此ASLRing相对于数据或bss的文本将需要运行时修正(而不是这样做)。

或者,依赖于位置的可执行程序将其所有段加载到固定(虚拟)地址,只有堆栈地址是随机化的。

“堆”通常不是真实的东西,特别是在具有虚拟内存的系统中,因此每个进程都可以有自己的私有虚拟地址空间。通常,您会为堆栈保留一些空间,并且在分配新页面时,malloc (实际上是它的底层mmap(MAP_ANONYMOUS)系统调用)可以选择那些尚未映射的空间之外的所有内容。但是,是的,即使是现代Linux上的现代glibc的malloc仍然使用brk()向上移动小分配的“程序中断”,以图中显示的方式增加“堆”的大小。

票数 2
EN

Stack Overflow用户

发布于 2015-09-06 05:01:52

这个数字代表了一个具体的实现或者一个理想化的实现。流程不一定具有这种结构。在许多系统上,流程看起来只是有点类似于图中的流程。

票数 0
EN

Stack Overflow用户

发布于 2015-09-08 21:08:50

我认为这是一些委员会的建议,然后像GCC这样的工具就符合这个建议。二进制格式定义了这些段,操作系统及其工具促进了该格式的处理在系统上运行。假设ELF是由system V推荐的,然后被unix采用;由gcc制作在unix上运行的ELF二进制文件。所以我觉得故事可以从二进制格式开始,因为它决定了内存映射(代码,数据/堆/堆栈)。在其他hack中,二进制格式定义了加载程序时要映射的内存映射。例如,ELF定义段(将代码排列在文本、数据、堆栈中以加载到存储器中),当加载器加载这些段时,GCC生成ELF二进制段。操作系统还可以自由地调整这些段的值,如堆栈大小。这些是我试图巩固的有争议的响亮的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32413193

复制
相关文章
【02】Camunda系列-扩展案例-用户任务、网关、决策自动化
点击刚刚创建的批准付款节点,然后通过扳手设置节点的类型为用户任务(User Task)
用户4919348
2022/09/28
3.2K0
【02】Camunda系列-扩展案例-用户任务、网关、决策自动化
【02】Camunda系列-扩展案例
点击刚刚创建的批准付款节点,然后通过扳手设置节点的类型为用户任务(User Task)
用户4919348
2022/09/28
2.5K0
【02】Camunda系列-扩展案例
Camunda整体架构和相关概念
Camunda BPM 是一个轻量级、开源灵活的工作流框架,它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎,因此它可以嵌入到任何Java应用程序或运行时容器中。 下图显示了最重要的组件以及一些典型的用户角色。
共饮一杯无
2022/11/24
2K0
Camunda整体架构和相关概念
流程引擎activiti原理_activiti流程引擎原理
4、springboot2.0整合工作流activiti6.0以及与业务集成时的一些坑
全栈程序员站长
2022/11/01
5K0
流程引擎activiti原理_activiti流程引擎原理
哪个开源工作流引擎更好?Flowable or Camunda ?
  当下在国内大家可以选择的开源的工作流引擎还是比较多的,但是对于具体选择用哪个产品,各自的优缺点有哪些其实并不是太清楚,为此波哥今天专门给大家来整理总结下。
用户4919348
2022/10/28
8.1K1
【第三篇】Camunda系列-整合SpringBoot
  在工作流引擎中流程设计器是一个非常重要的组件,而InterlliJ IDEA是Java程序员用到的最多的编程工具了。前面在基础篇的介绍中我们都在通过Camunda提供的流程设计器绘制好流程图,然后需要单独的拷贝到项目中,要是调整修改不是很方便,这时我们可以在IDEA中和流程设计器绑定起来。这样会更加的灵活。
用户4919348
2022/10/08
11.9K0
【第三篇】Camunda系列-整合SpringBoot
【第六篇】Camunda系列-流程变量
  流程变量可以用将数据添加到流程的运行时状态中,或者更具体地说,变量作用域中。改变实体的各种API可以用来更新这些附加的变量。一般来说,一个变量由一个名称和一个值组成。名称用于在整个流程中识别变量。例如,如果一个活动(activity)设置了一个名为 var 的变量,那么后续活动中可以通过使用这个名称来访问它。变量的值是一个 Java 对象。
用户4919348
2022/10/28
4.2K0
【第六篇】Camunda系列-流程变量
前端JS计算精度损失的问题
https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.0.0/math.min.js
码客说
2022/10/04
2.2K0
TSQL–临时表和表变量
2. 表变量适用于数据较小的情况,表变量只能在定义时创建约束(PRIMARY KEY/UNIQUE)从而间接建立索引
全栈程序员站长
2021/11/29
7610
BPMN和DMN基本概念和使用案例
业务流程模型和表示 (BPMN) 是流程建模的全球标准,也是成功实现业务-IT 协调的最重要组成部分之一。 越来越多的组织正在使用 BPMN,并且越来越多的大学将 BPMN 作为一门学科来教授。原因如下:
共饮一杯无
2022/11/24
2.6K1
BPMN和DMN基本概念和使用案例
TSQL--临时表和表变量
1. 临时表适用数据量较大的情况,因为临时表可以建立索引 2. 表变量适用于数据较小的情况,表变量只能在定义时创建约束(PRIMARY KEY/UNIQUE)从而间接建立索引 3. 临时表是事务性的,数据会随着事务回滚而回滚,表变量是非事务性的 4. 临时表和表变量都存放在内存中,当内存存在压力时才放入到硬盘 5. 临时表属于回话级别,除非显式DROP,否则会一直保持到回话结束 6. 表变量属于上下文级别,当前批处理结束后会被立即释放。 7. 临时表的创建删除会导致存储过程重编译,而在存储过程中使用表变量不
用户1217611
2018/01/30
1.2K0
python for循环带双重变量方法
记录一下今天遇到的问题,想在for循环添加变量,其实通过外部变量也可以做到,这里既然提到for循环了就直接拿来用就可以了
德宏大魔王
2023/08/08
1330
python for循环带双重变量方法
js数字计算精度问题修正
程序计算是一个很普遍的存在,但是语言的计算精度却是一个困扰人的问题,比说说,计算0.1+0.2,0.3+0.6,不用计算机计算,你用口算当然可以计算出分别为0.3和0.9,但是计算机计算的结果却不一样
OECOM
2020/07/01
3.2K0
flowable camunda activiti 功能对比
flowable camunda activiti 三个框架都是从jbpm框架诞生出来的,先是有jbpm4,然后出来了一个activiti5,activiti5发展一段时间,又出来了一个Camunda。activiti5发展了4年,紧接着出来了一个flowable。本文重点对flowable camunda两个框架的功能对比。对比的camunda版本是7.10.0,flowable框架的版本是6.4.1.
全栈程序员站长
2022/08/31
8.3K1
flowable camunda activiti 功能对比
DMN:大脑的默认网络
这篇文章综述由世界著名的脑成像专家Marcus E.Raichle教授撰写,Raichle 教授来自圣路易斯华盛顿大学(Washington University in St Louis),他和他的研究团队在PET及fMRI研究中做出来了巨大的贡献,作为一个脑功能及脑网络研究工作者,非常有必要了解Raichle教授及他的团队所在做的工作:请你猛戳以下链接—https://sites.wustl.edu/nillabs/people/marcus-e-raichle/,认真的了解一下Raichle教授在脑功能及网络研究中所做出的巨大贡献。
用户1279583
2019/07/01
5.8K0
DMN:大脑的默认网络
SQL临时表和表变量 Declare @Tablename Table
大家好,又见面了,我是你们的朋友全栈君。 在SQL Server的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQL Server应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简单的使用了临时表。实际上临时表和表变量都有特定的适用环境。
全栈程序员站长
2022/09/25
1.4K0
springboot生成表结构和表数据sql
业务背景是需要某单机程序需要把正在进行的任务导出,然后另一台电脑上单机继续运行,我这里选择的方案是同步SQL形式,并保证ID随机,多个数据库不会重复。
程序员朱永胜
2023/08/17
2490
springboot生成表结构和表数据sql
camunda「建议收藏」
入门指导:1.https://docs.camunda.org/get-started/quick-start/ 看官网可以快速构建一个可用的工程;
全栈程序员站长
2022/09/19
1.5K0
camunda「建议收藏」
freemarker中的round、floor和ceiling数字的舍入处理
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119146.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/09
1.6K0
【第四篇】Camunda系列-ProcessEngine核心对象
  ProcessEngine是Camunda流程引擎的核心。我们在流程中的很多具体的处理比如流程部署、流程部署、流程审批等操作都是通过XXXService来处理的。而相关的XXXService都是通过ProcessEngine来管理的。所以对于ProcessEngine的创建方式还是很有必要掌握的。
用户4919348
2022/10/27
3.3K0
【第四篇】Camunda系列-ProcessEngine核心对象

相似问题

使用Java Camunda Springboot启动程序创建多个DMN

15

如何基于DMN规则执行Camunda BPMN工作流

112

如何在运行时更新camunda dmn表?

143

评估Camunda DMN决策时的异常

28

如何在DMN camunda中验证多个规则输入

142
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文