进程探寻之内存分布

UNIX系统中进程都会占用4G虚拟内存。4G虚拟内存又被分成不同的内存区域,用于完成不同的程序功能。本文将详细介绍进程中不同区域的功能,既内存分布情况。
用户空间与内核空间
4G虚拟内存可分为两大部分——用户空间与内核空间。用户空间占用3G内存空间,是0x00000000到0xbfffffff的内存区域。内核空间占用1G内存空间,是0xc0000000到0xffffffff的内存区域。内核空间保存内核的代码与数据。这是用户不可操作的区域,任何对其的读取与写入操作都会导致程序的崩溃。尽管用户不可以直接操作内核空间,但可以通过系统调用间接操作内核空间。内核空间包含了大量指令,这其中包含了一系列有用的函数。这些函数可以完成各种不同的系统任务。这些函数便是系统调用对应的内核函数。调用系统调用便是调用对应的函数。用户空间保存了程序的代码与数据,是用户可以操作的内存区域。用户空间又可详细区分为代码段,数据段,堆,栈。

#include <stdio.h>

int main(int argc,char **argv)
{
    char *p=(char *)0xc0000000;
    char ch=*p;
    printf("ch = %d\n",ch);
    return 0;
}

代码段
程序的所有指令都保存在代码段中,代码段不仅可以看成是指令的集合,也可以看成是函数的集合。代码段是可读,可执行的,但不能写入。

数据段
全局变量和静态变量全都保存在数据段中。数据段又可分为初始化数据段和未初始化数据段。数据段可读,可写。


栈是函数调用的基本,是非常重要的内存区域。
在UNIX中,栈默认占用8M内存空间。当栈使用超出8M内存时,将导致程序崩溃。我们可以使用setrlimit系统调用调整栈的默认大小。
每个进程初始化时,操作系统都会将命令行参数和环境变量添加到栈中。(参考execve系统调用)内核会申请128KB的内存存放命令行参数和环境变量。内核按照图一的方式在栈中存放命令行参数和环境 。存放完成后,栈顶指针指向argc的内存区域。

这里写图片描述


在数据段与栈之间存在着一块非常巨大的内存区域——堆。堆主要用于动态分配内存。malloc和free函数便是使用该内存区域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值