22.程序和进程(Linux),代码和数据为什么分开存放?

程序在Linux中表现为可执行文件,如.out和ELF格式。当加载到内存并分配堆栈空间,形成进程。代码和数据分开存放是因为:1) 可映射到不同属性内存,代码只读,数据可读写;2) 提高缓存命中率,利用CPU缓存体系;3) 多进程时,只读代码段可共享,节省内存。

 

目录

程序和进程(Linux)

代码和数据为什么分开存放?

原图


 

程序和进程(Linux)

 

程序其实是一个含有运行的代码和数据以及其他关于本程序在内存中运行的大小等信息的一个合体。而这里所讲的程序我们以可执行文件来代替。

程序在磁盘上,当操作系统把程序相关信息读入到内存中并合理的分配了运行时的内存大小,也就是堆内存和栈内存之后,创建PCB然后程序就变成了进程,那么程序是不是就是可执行文件?在linux中的可执行文件的类型主要有两种,.out和ELF文件 

 

 

代码和数据为什么分开存放?

 

1.程序执行之后,代码和数据可以被映射到不同属性的虚拟内存中。因为代码一般是只读的,而数据是可读可写的。

2.现代CPU有强大的缓存体系,程序和代码分类可以提高程序的局部性,增加缓存的命中率。

3.最重要的一个原因是当有多个程序副本在运行时,只读部分可以只在内存中保留一份,这样大大节省了内存。(代码段只读,数据的可读可写) 

 

 

原图

 头部里面存的是整个进程的信息。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值