返回顶部
首页 > 资讯 > 操作系统 >Linux下的进程虚拟内存结构是什么
  • 873
分享到

Linux下的进程虚拟内存结构是什么

2024-04-02 19:04:59 873人浏览 安东尼
摘要

这篇文章主要介绍“linux下的进程虚拟内存结构是什么”,在日常操作中,相信很多人在Linux下的进程虚拟内存结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linu

这篇文章主要介绍“linux下的进程虚拟内存结构是什么”,在日常操作中,相信很多人在Linux下的进程虚拟内存结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下的进程虚拟内存结构是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

postgresql使用进程架构,每个连接对应一个后台进程,为了更好的理解这种架构,有必要深入理解进程的相关知识

一、虚拟内存

进程虚拟内存的详细结构如下图所示:

Linux下的进程虚拟内存结构是什么

C样例程序如下:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void f(void)//子函数
{
     int a;
     int b;
     int c;
     a = 98;
     b = 1024;
     c = a * b;
     printf("[f] a = %d, b = %d, c = a * b = %d\n", a, b, c);
     printf("[f] Adresses of a: %p, b = %p, c = %p\n", (void *)&a, (void *)&b, (void *)&c);
}

int main(int ac, char **av, char **env)
{
     int a;//本地变量,位于栈中
     void *p;//指针,在堆中分配内存
     int i;
     int size;
     printf("Address of a: %p\n", (void *)&a);
     p = malloc(98);//在堆中分配内存
     if (p == NULL)
     {
          fprintf(stderr, "Can't malloc\n");
          return (EXIT_FAILURE);
     }
     printf("Allocated space in the heap: %p\n", p);
     printf("Address of function main: %p\n", (void *)main);//main函数所在的内存地址
     printf("First bytes of the main function:\n\t");
     for (i = 0; i < 15; i++)
     {
          printf("%02x ", ((unsigned char *)main)[i]);//首16个字节
     }
     printf("\n");
     printf("Address of the array of arguments: %p\n", (void *)av);//输入参数数组地址
     printf("Addresses of the arguments:\n\t");//
     for (i = 0; i < ac; i++)
     {
          printf("[%s]:%p ", av[i], av[i]);//打印输入参数
     }
     printf("\n");
     printf("Address of the array of environment variables: %p\n", (void *)env);//环境变量地址
     printf("Address of the first environment variables:\n");//环境变量信息
     for (i = 0; i < 3; i++)
     {
          printf("\t[%p]:\"%s\"\n", env[i], env[i]);
     }
     
     i = 0;
     while (env[i] != NULL)//以NULL作为终结
     {
          i++;
     }
     i++; 
     size = i * sizeof(char *);
     printf("Size of the array env: %d elements -> %d bytes (0x%x)\n", i, size, size);//计算环境变量数组大小
     f();//调用函数
     getchar();//接受输入,进程不退出
     return (EXIT_SUCCESS);
}

编译并执行

[root@localhost hacker]# GCc -Wall -Wextra -Werror main-7.c -o 7
[root@localhost hacker]# ./7 Hello Hacker Jack!
Address of a: 0x7fff5b327bb8 --> 位于栈中
Allocated space in the heap: 0x9b6010 --> 位于堆中
Address of function main: 0x400729 --> 可执行文件
First bytes of the main function:
    55 48 89 e5 48 83 ec 40 89 7d dc 48 89 75 d0 
Address of the array of arguments: 0x7fff5b327cb8 -->参数数组地址
Addresses of the arguments:
    [./7]:0x7fff5b329808 [Hello]:0x7fff5b32980c [Hacker]:0x7fff5b329812 [Jack!]:0x7fff5b329819 --> 输入参数
Address of the array of environment variables: 0x7fff5b327ce0 --> 环境变量数组
Address of the first environment variables:
    [0x7fff5b32981f]:"XDG_SESSION_ID=1"
    [0x7fff5b329830]:"HOSTNAME=localhost.localdomain"
    [0x7fff5b32984f]:"SELINUX_ROLE_REQUESTED="
Size of the array env: 27 elements -> 216 bytes (0xd8)
[f] a = 98, b = 1024, c = a * b = 100352 
[f] Adresses of a: 0x7fff5b327b7c, b = 0x7fff5b327b78, c = 0x7fff5b327b74 --> 函数f中的变量地址

通过udis86可反编译,得到汇编代码

[root@localhost install]#  echo "55 48 89 e5 48 83 ec 10 48 8d 45 f0 48 89 c6" | udcli -64 -x -o 400729
0000000000400729 55               push rbp                
000000000040072a 4889e5           mov rbp, rsp            
000000000040072d 4883ec10         sub rsp, 0x10           
0000000000400731 488d45f0         lea rax, [rbp-0x10]     
0000000000400735 4889c6           mov rsi, rax            
[root@localhost install]#

查看该进程的内存映射信息

[root@localhost install]# ps aux | grep "./7" | grep -v grep
root      6471  0.0  0.0   4348   348 pts/0    S+   15:24   0:00 ./7 Hello Hacker Jack!
[root@localhost install]# cat /proc/6471/maps
00400000-00401000 r-xp 00000000 fd:00 134287606                          /data/source/hacker/7
00600000-00601000 r--p 00000000 fd:00 134287606                          /data/source/hacker/7
00601000-00602000 rw-p 00001000 fd:00 134287606                          /data/source/hacker/7
009b6000-009d7000 rw-p 00000000 00:00 0                                  [heap]
7f95b5d16000-7f95b5ed8000 r-xp 00000000 fd:00 151914                     /usr/lib64/libc-2.17.so
7f95b5ed8000-7f95b60d8000 ---p 001c2000 fd:00 151914                     /usr/lib64/libc-2.17.so
7f95b60d8000-7f95b60dc000 r--p 001c2000 fd:00 151914                     /usr/lib64/libc-2.17.so
7f95b60dc000-7f95b60de000 rw-p 001c6000 fd:00 151914                     /usr/lib64/libc-2.17.so
7f95b60de000-7f95b60e3000 rw-p 00000000 00:00 0 
7f95b60e3000-7f95b6105000 r-xp 00000000 fd:00 151907                     /usr/lib64/ld-2.17.so
7f95b62f8000-7f95b62fb000 rw-p 00000000 00:00 0 
7f95b6301000-7f95b6304000 rw-p 00000000 00:00 0 
7f95b6304000-7f95b6305000 r--p 00021000 fd:00 151907                     /usr/lib64/ld-2.17.so
7f95b6305000-7f95b6306000 rw-p 00022000 fd:00 151907                     /usr/lib64/ld-2.17.so
7f95b6306000-7f95b6307000 rw-p 00000000 00:00 0 
7fff5b309000-7fff5b32a000 rw-p 00000000 00:00 0                          [stack]
7fff5b3f1000-7fff5b3f3000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
[root@localhost install]#

到此,关于“Linux下的进程虚拟内存结构是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Linux下的进程虚拟内存结构是什么

本文链接: https://lsjlt.com/news/63629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux下的进程虚拟内存结构是什么
    这篇文章主要介绍“Linux下的进程虚拟内存结构是什么”,在日常操作中,相信很多人在Linux下的进程虚拟内存结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linu...
    99+
    2024-04-02
  • Linux进程虚拟内存的工作机制是什么
    Linux进程的虚拟内存工作机制是基于分页和分段的。在Linux中,每个进程都有自己独立的虚拟地址空间,这个虚拟地址空间被分成多个固...
    99+
    2024-04-28
    Linux
  • Linux虚拟内存是什么
    这篇“Linux虚拟内存是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux虚拟内存是什么”文章吧。虚拟内存由来毋...
    99+
    2023-06-27
  • linux中虚拟内存是什么
    这篇文章主要为大家展示了“linux中虚拟内存是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中虚拟内存是什么”这篇文章吧。1. 讨论虚拟内存前的热身我们需要知道的是计算机对内存分...
    99+
    2023-06-15
  • Java虚拟机的内存结构是怎样的
    本篇内容主要讲解“Java虚拟机的内存结构是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java虚拟机的内存结构是怎样的”吧!一:简介内存(Memory)也被称为内存储器,其作用是用于暂...
    99+
    2023-06-02
  • linux的虚拟内存机制是什么
    这篇“linux的虚拟内存机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux的虚拟内存机制是什么”文章吧。l...
    99+
    2023-07-01
  • Java虚拟机的体系结构和内存模型是什么
    这篇文章主要介绍“Java虚拟机的体系结构和内存模型是什么”,在日常操作中,相信很多人在Java虚拟机的体系结构和内存模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java虚拟机的体系结构和内存模型...
    99+
    2023-06-17
  • Java虚拟机中JVM内存结构是怎么样的
    这篇文章给大家分享的是有关Java虚拟机中JVM内存结构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、JVM启动流程:JVM启动时,是由java命令/javaw命令来启动的。二、JVM基本结构:JV...
    99+
    2023-06-02
  • python虚拟机pyc文件结构是什么
    本篇内容介绍了“python虚拟机pyc文件结构是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PYC 文件pyc 文件是 Python...
    99+
    2023-07-05
  • 云服务器虚拟内存是什么
    云服务器虚拟内存(cloud memory)是指服务器为虚拟机分配的内存。虚拟内存并不是服务器的真正物理内存,而是虚拟内存管理系统将服务器中的物理内存分配给虚拟机使用的空间。虚拟内存管理系统可以动态分配内存大小,并且可以在同一时间内为多个虚...
    99+
    2023-10-27
    虚拟内存 服务器
  • PostgreSQL 源码解读(229)- Linux Kernel(进程虚拟内存#3)
    PostgreSQL使用进程架构,...
    99+
    2024-04-02
  • Linux进程共享内存的方法是什么
    这篇文章主要讲解了“Linux进程共享内存的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux进程共享内存的方法是什么”吧!共享内存 IPC 原理共享内存进程间通信机制主要用...
    99+
    2023-06-28
  • Oracle数据库的内存结构是什么
    这篇文章主要介绍“Oracle数据库的内存结构是什么”,在日常操作中,相信很多人在Oracle数据库的内存结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle...
    99+
    2024-04-02
  • JVM内存结构的三大块是什么
    这篇文章主要介绍“JVM内存结构的三大块是什么”,在日常操作中,相信很多人在JVM内存结构的三大块是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JVM内存结构的三大块是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-02
  • win7虚拟内存设置的方法是什么
    这篇文章主要讲解了“win7虚拟内存设置的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win7虚拟内存设置的方法是什么”吧!win74g内存虚拟内存设置多少合适答:一般虚拟内存可...
    99+
    2023-07-01
  • 怎么剖析JVM虚拟机的内部结构
    怎么剖析JVM虚拟机的内部结构,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JVM虚拟机的内部结构JVM虚拟机是Java平台的核心, 为了让编译产生的字节码能够...
    99+
    2023-06-17
  • Oracle数据库中的内存结构是什么
    Oracle数据库中的内存结构主要包括SGA(System Global Area)和PGA(Program Global Area...
    99+
    2024-03-02
    Oracle
  • JVM内存结构:程序计数器、虚拟机栈、本地方法栈
    目录一、JVM 入门介绍JVM 定义JVM 优势JVM JRE JDK的比较学习步骤二、内存结构整体架构1、程序计数器(寄存器)1.1 作用1.2 特点2、虚拟机栈2.1 定义2.2...
    99+
    2024-04-02
  • 阿里云服务器虚拟内存是什么
    阿里云服务器虚拟内存可以使用操作系统提供的内存管理工具来实现。操作系统会为每个物理内存分配一个内存地址和指向该内存地址的指针。然后,每个逻辑分区将会被分配一个指向该内存地址的指针。当用户在物理内存中运行程序时,操作系统会将物理内存的指针移动...
    99+
    2023-10-27
    阿里 虚拟内存 服务器
  • 云服务器虚拟内存是什么意思
    云服务器虚拟内存通常是按照一定的规则自动分配的,例如按照页面的大小和磁盘I/O请求来分配虚拟内存块。这些虚拟内存可以用于多种不同的应用程序,包括Web服务器、数据库服务器、图形渲染器等。 ...
    99+
    2023-10-27
    虚拟内存 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作