美文网首页
进程的内存映射

进程的内存映射

作者: 54c1eca7148a | 来源:发表于2019-05-30 04:52 被阅读0次

1、如何查看一个进程的内存映射?

    使用:cat  /proc/进程的pid/maps(进程的pid获取见getpid函数)

用户空间结构

    例:

    char buf[]="aaaaa";

    char *str="aaaaa";

    printf("buf%p\n",buf);//输出字符串数组的首地址

    printf("str's addr=%p\n",&str);

    printf("str's comt=%p\n",str);

上一段代码在用户空间内存中的映射

这里需要注意,局部变量,函数形参被分配到栈,静态的局部变量和全局变量在数据段中,字符串在代码段中,使用malloc等申请的空间分配在堆中。buf[]中的字符串内容和str指向的字符串内容虽然都是“aaaaa”。但是buf[]中的内容是程序在执行的时候,将“aaaaa”拷贝到buf[]中的。也就是说buf[]中存在实实在在的字符串数据。

(1)同时,也可以看出初始化和赋值的区别。如:

       在上述语句中,将char buf[]="aaaaa";改为char buf[12];

      增加  buf="aaaaa";

这句语句将代码段的“aaaaa”首地址赋值给buf,即让buf指向代码段字符串,而本身buf是指向栈中的字符串的,buf是一个固定的常量,不能被赋值,而str这种指针变量可以被赋值改变指向的地址。而初始化就如同上述,将字符串拷贝到buf[]中,而不是改变buf所指地址。如要实现赋值拷贝,可以使用strcpy函数。

(2)另外:   

    如有以下定义:char *p;*p='m';

   因为指针还未进行初始化或者赋值,p是一个悬空指针。为非法地址。编译可以通过,但是无法执行。 

(3)有如下子函数

        void count(void){

            int c=1;

            static int c1=1;

            c++;

            c1++;

             printf("c=%d,%d\n",c,c1);

            printf("c addr=%p\n",&c,&c1);

            return;

        }

    在主函数中使用for循环调用6次count函数,使用cat查看maps文件内的内存映射,可以看到c被分配到栈段,c1被分配到数据段。故生命周期不同。如下图所示

count程序变量内存映射

2、获取进程信息

获取进程的ID号:

    pid_t  getpid(void);

功能:

    获取进程的pid

参数:

    void 

返回值

    调用进程的pid

包含头文件:#include<sys/types.h>、#include<unistd.h>

相关文章

  • 内存映射MMAP

    什么是内存映射 所谓内存映射,就是将文件的磁盘扇区映射到进程的虚拟内存空间的过程。 操作系统中的进程 进程就是一个...

  • 基于C++的通过内存映射实现进程间的数据交换

    VC++ 通过内存映射实现进程间的数据交换,创建内存映像对象,从内存映射对象读数据,将文件的视图映射到一个进程的地...

  • 进程的内存映射

    1、如何查看一个进程的内存映射? 使用:cat /proc/进程的pid/maps(进程的pid获取见getp...

  • 内存映射mmap 和 共享内存

    内存映射 内存映射指的是将 : 进程中的1个虚拟内存区域 & 1个磁盘上的对象,使得二者存在映射关系。当然,也可以...

  • MMap

    mmap 是什么?本质是一种进程虚拟内存映射的方法,可以将一个文件、一段物理内存或其他对象映射到进程的虚拟内存地址...

  • 纪要梳理(常识)

    进程 线程 进程是分配资源(内存文件等)的基本单位,比如new了一块内存,就是操作系统将一块物理内存映射到进程的地...

  • 进程间通讯

    一、进程间通讯的方式进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和...

  • 共享内存数据库--设计及实现

    共享内存: 共享内存是三种IPC机制中的一种.共享享内存允许两个或多个进程进程共享同一块内存(这块内存会映射到各个...

  • Linux 内存管理:内存分配

    分配时机 当系统创建一个进程会调用exec函数,为进程做内存映射,分配内存。 2 核心流程 2.1 load_el...

  • liunx中共享内存

    实现步骤 创建共享内存区 进程1申请一块共享区域,通过shmget函数生成 映射共享内存到进程1 通过shmat实...

网友评论

      本文标题:进程的内存映射

      本文链接:https://www.haomeiwen.com/subject/rbgetctx.html