首页 > 系统相关 >程序的内存空间

程序的内存空间

时间:2023-05-06 22:12:46浏览次数:32  
标签:p2 p1 int s1 程序 内存空间 内存

进程的内存空间分布

从下往上分别是:

  • 正文段(代码段).text
     只读,可共享; 代码段(code segment/text segment )通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。         在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
  • 数据段

       储存已被初始化了的静态数据。数据段(data segment )通常是指用来存放程序中已初始化的全局变量或者静态变量的一块内存区域。数据段属于静态内存分配。

  • BSS 段
            未初始化的数据段. BSS 段(bss segment )通常是指用来存放程序中未初始化的全局变量或者静态变量的一块内存区域。BSS 是英文Block Started by Symbol 的简称。BSS 段属于静态内存分配。
  • 堆(heap)

     堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

  •  栈(stack)

       栈又称堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{} ”中定义的变量(但不包括static 声明的变量,static 意味着在数据段中存放变量)。

       除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/ 恢复调用现场。

       从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

  •  共享区
     图中间在栈和堆之间,有一个共享内存的映射的区域。这个就是共享内存存放的地方。一般共享内存的默认大小是32M。
  • 内核空间
       高地址,一般window2G,  Linux1G        注意:对于x86(32位系统)而言,实际的用户空间只有2G,所以大小一旦超过2G程序就无法正常运行,但是对于x64(64位系统),大小基本不受限制。
       对于Linux,用户实际空间能达到3G(如上图所示)。    图解堆栈空间分配对应的指针代码:

    int* p1 = new int;     //在堆区开辟一块整型内存空间(0x0001),在栈中创建一个指针p1指向这块内存,指针p1本身地址为0xFF09
   //注意,int* p1开辟的空间大小如果是32位机器,就是4个字节;64位机器就是8个字节。但是new int的内存空间大小都是4个字节。 *p1 = 10;         //上面代码开辟的空间中存放的值为10
int s1 = 11;       //在栈区创建变量s1(0xFF05),值为11 int* p2 = &s1;     //又在栈区创建指针p2(0xFF01),指向s1的内存空间(0xFF05),就是说p2中存放的值是s1的地址0xFF05 *p2 = 12;        //因为指针p2指向s1的内存空间,所以改变的是s1的值

 

 

标签:p2,p1,int,s1,程序,内存空间,内存
From: https://www.cnblogs.com/kongyijin/p/17375832.html

相关文章

  • 【CS】客户端更新(一)——更新程序文件方式
    一、前言      最近接手了个半CS半BS的项目。怎么说呢?由于项目比较紧张,而且BS的项目已经做出来了,虽说不是很好,但是也可以满足增删改查的操作。但是CS的项目比较紧,给了一个月的时间,如果每个功能都做的话,时间根本不够,就算时间够,资金也不够。所以就在CS的界面中调用了BS的界面,然......
  • C/C++活动管理程序[2023-05-06]
    C/C++活动管理程序[2023-05-06]设计一个活动管理程序,该程序具有以下功能:(1)多用管理,用户登录:输入用户名和密码,密码正确才允许登录。(2)可以创建活动,设定活动的内容,活动的人数,时间,要求等;(3)登录的所有用户可以查看当前所有正在征集的活动,并可以选择参加;(4)活动的创建者,可......
  • 关于 “无法启动此程序,因为计算机中丢失mfc140.dll,尝试重新安装该程序已解决此问题”
      这个问题花了很久的时间百度,后来终于理解了dll文件的作用。VC运行库有必要下吗?VC++运行库有什么用?vc运行库里面包含的dll和ocx文件可以确保很多软件能够正常运行,因为有很多软件是用VC++语言编写的,那么在运行的时候也需要相应的运行库支持,下面系统之家小编来详细介绍一下V......
  • 微信小程序生态13-微信公众号自定义菜单配置
    自定义菜单微信公众号分为订阅号和服务号两种,虽然二者很大的不同,但是这两种公众号的底部却是差不多的:都有菜单栏,而且这些底部菜单也都是自定义配置的。如CSDN的官方公众号的底部就有精彩栏目、新程序员、CSDN等菜单:微信公众号菜单栏的配置需要登录『微信公众平台』并选择公众......
  • 拼团小程序开发功能
    拼团小程序开发功能主要包含以下几个方面:用户管理:拼团小程序需要实现用户注册、登录、注销等功能,以及对用户行为进行分析和管理。商品管理:拼团小程序需要实现商品的添加、编辑、分类、价格设置等功能,以及商品的搜索、推荐、筛选等功能。拼团模式:拼团小程序需要实现不同的......
  • 第五章 输入输出系统 5.3 中断机构和中断处理程序
    中断是多道程序得以实现的基础,是设备管理的基础;中断处理程序是I/O系统中最低的一层,是整个I/O系统的基础。一、中断简介 1.中断和陷入 中断:CPU对I/O设备发来的中断信号的响应。 陷入:由CPU内部事件(非法指令、越界、运算上溢下溢等)所引起的中断。 2.中断向量表和中断优......
  • c# 使用ajaxfileupload上传文件,通过一般处理程序(Handler)接收文件
    界面如下图:HTML代码如下:<html><head><!--引入jqueryajaxfileupload.js--><!--ajaxfileupload.js为了兼容IE不同版本,需要修改源代码,文章附带源代码--><scriptsrc="../../Content/js/jquery/jquery-1.4.2.min.js"type="text/ja......
  • Springboot 系列 (30) - Springboot+HBase 大数据存储(八)| Springboot Client/Server
    Kerberos(SecureNetworkAuthenticationSystem,网络安全认证系统),是一种网络认证协议,其设计目标是通过密钥系统为Client/Server提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被......
  • 8-在集成开发环境当中开发Servlet程序
    1.集成开发工具很多,其中目前使用比较多的是:IntelliJIDEA(这个居多,IDEA在提示功能方面要强于Eclipse,也就是说IDEA使用起来比Eclipse更加智能,更好用。JetBrain公司开发的。收费的。)Eclipse(这个少一些),Eclipse目前还是有团队使用,只不过处于减少的趋势,自己从事工作之后,可能......
  • 用DOSBOX运行helloworld程序
    过程:编写---编译---连接---执行目录1,编写2,编译3,链接4,执行5,补充:简捷编译和链接1,编写下面是一段打印"helloworld!"的程序DSEGSEGMENTMESSDB'Hello,World!',0DH,0AH,24HDSEGENDSSSEGSEGMENTPARASTACKDW256DUP(?)SSEGENDSCSEGSEGME......