【转】程序在内存中的分布

 前些天学习到了程序在虚拟内存中分布的一些知识点,结合在网上查阅的一些资料,整理一下知识点。本博客参考博主 hackbuteer1的《程序在内存中的分布》这篇文章。

 

    

 

v 在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。

 

例如:对于一台内存为256M的32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x00000000~0x0FFFFFFF(256M)。

 

v 一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。

 

从低地址到高地址,可分为下面几段: 

Ø 预留内存地址(操作系统维护的内存地址,不可访问) 

 

Ø 程序代码区(只读,存代码和一些其他的东西); 

 

Ø data段(存初始化的全局变量和static变量,另外还有文字常量区,常量字符串就是放在这里,程序结束后有系统释放); 

 

Ø bss段(存未初始化的全局变量和static变量); 

 

Ø 堆(由低地址向高地址增长,一般(C++)new和(C)malloc分配,由程序员分配释放);

 

Ø 共享库文件(调用的库文件,位于堆和栈之间); 

 

Ø 栈(由高地址向低地址增长,和堆的增长方式相对,对不同的OS来说,栈的初始大小有规定,可以修改,目前默认一般为2M,由编译器自动分配释放); 

 

 

 

 

 

v 以上程序在虚拟内存空间中的分布,适用于一般的操作系统和内核。但不完全适用,例如:《unix系统编程》32位下,0-3G是用户区,3G-4G是内核区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php怎么创建进程,在php中为长时间运行的进程创建后台进程

好的,请原谅我,如果这是另一个问题的重复,但在搜索后我还没有找到一个明确的答案.我基本上想要做的是让我的php web应用程序触发一些事件(如电子邮件或报告生成器)可能需要几分钟才能完成并立即将控制权返回给页面.我来自.NET世界,可以通过线程轻松完成.所以这是工作流程&#…

GARFIELD@04-02-2005

treat 转载于:https://www.cnblogs.com/rexhost/archive/2005/04/02/130985.html

【转】TechEd第一课:新一代关系管理系统XRM**

提起微软的CRM产品,最先想到的是CRM 4.0。除了字面理解上的客户关系管理系统外,微软也赋予这款产品“应用开发平台”的角色,并给它一个新名字——XRM。XRM到底是什么东西?它能用来做什么?这些问题都在今天这节“微软新…

linux打包启动这着的文件,linux – 打开一个RPM文件并重新打包它

修改您没有源的RPM的最佳方式是按照以下步骤操作:>使用rpm2cpio命令将rpm解压缩到目录中>在该子目录内进行必要的更改制作一个“虚拟”规范文件并构建它.该虚拟规范文件可能如下所示:Name: blahVersion: 1.0Release: 1Summary: blahLicense: blahD…

学习Java的相关知识

工作的原因现在学习Java极其相关的技术,包括JBoss,Struts,JSP,EJB等. 感觉Java的库比较多,但做的真的一般,易用性很差,编程也非常的“片断”性,不像.NET思想连贯性强。可能是才学习几天的缘故吧。 Java的throws我很讨厌,我觉得绝对是个设计的错误。 转载…

【转】ASP.NET 2.0 - 导航(Navigation)SiteMap导航菜单关系

ASP.NET 2.0 拥有内建的导航控件。 网站导航 维护大型站点的导航菜单是很困难,也很费时的。 在 ASP.NET 2.0 中,菜单可存储在文件中,这样维护起来更加方便。这个文件通常名为 web.sitemap,被存放在网站的根目录中。 此外&…

Up or out!!!

近日获知浙江大学计算中心被撤销,心里感慨万千。忽然想起前几天听到的一句话:Up or out!如是而已。转载于:https://www.cnblogs.com/pipisong/archive/2005/06/14/174099.html

linux内核的邻居表,Linux内核报文收发-L3 - Section 3. IP协议、邻居子系统主要是接收、转发和发送三部分...

版本说明Linux版本: 3.10.103网卡驱动: ixgbe网络协议注册inet_init主要是注册各种协议注册TCP协议proto_register(&tcp_prot, 1)继续注册UDP、RAW、PINGarp_init, ip_init, tcp_init, udp_init, ping_init, icmp_initdev_add_pack(&ip_packet_t…

【转】EntityFramework使用Code First模式创建数据库控制生成单数形式的表名

使用Code-First模式生成数据库时,默认生成的数据库表的名称为类型的复数形式,例如实体类名称是"User",默认生成的数据库表名为“Users”,多数情况下我们并不想生成的数据库表名为复数形式,那么应该如何来控制…

0803

“同”表示完全相同的产品。产品后的数字是价钱。AMD的CPU只能配AMD的主板,INTEL亦然。在最后,给出了一5500元的液晶家用配置 -----------------CPUINTEL Celeron D 331(散装) /600AMD Sempron 2600(754盒装&#xff0…

linux grep子目录,linux grep搜索文件中的字符串

从文件中查找关键词grep linux text.txt //查找包含 linux的关键词[rootlocalhost ~]# grep root /etc/grouproot:x:0:rootbin:x:1:root,bin,daemon从多个文件中查找关键词[rootlocalhost ~]# grep root /etc/group /etc/my.cnf/etc/group:root:x:0:root/etc/my.cnf:user root…

【转】云服务器cvm 云服务器ecs区别

1、全称 cvm的英文全拼是 Cloud Virtual Machine (云虚拟机) ecs的英文全拼是 Elastic Compute Service(弹性计算服务) 2、对比 云服务器cvm是普遍的虚拟云服务器统称,是一种简单高效、安全可靠、处理能…

linux make怎么运行,Linux Make 命令教程

原标题:Linux Make 命令教程来自:阮一峰的网络日志链接:www.ruanyifeng.com/blog/2015/02/make.html代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(…

快速了解c#中的索引器

快速了解c#中的索引器 C#中的索引器是新增加的,和属性有些不同。在c#中,属性可以是这样的:class Person {private string firstname;public string FirstName {get {return firstname;}set {firstname value;}}} 属性声明可以如下编码&#…

【转】C#运算符重载**

https://www.yiibai.com/csharp/csharp_operator_overloading.html 在C#中,可以重新定义或重载大多数内置运算符。 因此,程序员也可以使用具有用户定义类型的运算符。重载运算符是具有特殊名称的功能,关键字operator后跟定义运算符的符号。 类…

图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!

GTK是用于创建图形用户界面的工具包,GTK提供了一整套的小部件,适用于从小型一次性工具到完整的应用程序套件的项目。GTK是GNOME开发平台的核心,但是它也可以用于编写其他Linux环境的应用程序,以及针对微软Windows和苹果macOS的应用…

引用到网站绝对路径Server.MapPath(~/myfile.mdb)

在任何路径下,都可以用Server.MapPath("~/")引用到网站根目录下 转载于:https://www.cnblogs.com/yurichou/archive/2005/10/17/256357.html

【转】继承过程中 父类子类的 字段方法 内存分配 (非java语言)

名人名言:思想好比火星:一颗火星会点燃另一颗火星。一个深思熟虑的教师和班主任,总是力求在集体中创造一种共同热爱科学和渴求知识的气氛,使智力兴趣成为一些线索,以其真挚的、复杂的关系——即思想的相互关系把一个个…

linux设备驱动学习,linux设备驱动学习4

Linux设备驱动程序学习(4)-高级字符驱动程序操作[(1)ioctl and llseek]今天进入《Linux设备驱动程序(第3版)》第六章高级字符驱动程序操作的学习。一、ioctl大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备…

几个删除重复记录的SQL语句

几个删除重复记录的SQL语句在大的数据库应用中,经常因为各种原因遇到重复的记录,造成数据的冗余和维护上的不便。1.用rowid方法2.用group by方法3.用distinct方法 1。用rowid方法据据oracle带的rowid属性,进行判断,是否存在重复,语…