美文网首页网络通讯编程
3.1、创建虚拟内存到物理内存或文件的映射

3.1、创建虚拟内存到物理内存或文件的映射

作者: 奥斯特洛司机 | 来源:发表于2019-03-26 10:12 被阅读0次

include <sys/mman.h> //CPATH只到incude级

void* mmap(
void* start, //映射区内存的起始地址
//NULL系统自动选定(默认当前堆尾),成功返回之
size_t length, //字节长度,自动按页(4K)对齐
int prot, //映射权限
int flags, //映射标志
int fd, //文件描述符
off_t offset //文件偏移量,自动按页(4K)对齐
);

成功返回映射区内存起始地址,失败返回MAP_FAILED(-1)

2、销毁虚拟内存到物理内存或文件的映射
int munmap(
void* start, //映射区内存起始地址
size_t length //字节长度,自动按页(4k)对齐
);
成功返回0,失败返回-1

mmap/munmap底层不维护任何东西,知识返回一个首地址,所分配内存位于堆中。

brk/sbrk底层维护一个指针,记录所分配的内存结尾,所分配的内存位于堆中,底层调用mmap/munmap。

malloc底层维护一个双向链表和必要的控制信息,不可越界访问,所分配内存位于堆中,底层调用brk/sbrk。

每个进程都有4G的虚拟内存空间,
虚拟内存地址知识一个数字,
并没有和实际的物理内存相关联。
所谓内存分配和释放,
其本质就是建立或取消虚拟内存和物理内存之间的映射关系。

include <stdio.h>

include <unistd.h>

include <sys/mman.h>

define MAX_TEXT 256

int main(void){
char * psz = (char* )mmap(NULL,MAX_TEXT * sizeof(char),
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
if((psz == MAP_FAILED){
perror("mmap");
return -1;
}
sprintf(psz, "hello,world !");
printf("%s\n", psz);
printf("psz=%p\n", psz);
printf("查看/proc/%u/maps,按回车退出", getpid());
getchar();
if(munmap(psz, MAX_TEXT*sizeof(char)) == -1){
perror("munmap");
return -1;
}
return 0;
}

相关文章

  • 25用户态内存映射

    mmap 将虚拟地址空间映射到物理内存 匿名映射,即虚拟内存和物理内存直接映射文件映射,将文件映射到虚拟内存ima...

  • 3.1、创建虚拟内存到物理内存或文件的映射

    include //CPATH只到incude级 void* mmap(void* ...

  • MMap

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

  • Android内存管理机制

    Linux 的虚拟内存、物理内存、磁盘 为什么要有虚拟内存的概念 进程创建时,会分配4G的虚拟内存,如果分配物理内...

  • 《深入浅出计算机组成原理》笔记五

    内存映射 内存被分成固定大小的页,需要通过虚拟内存地址到物理内存地址的地址转换,才能到达实际存放数据的物理内存位置...

  • 内存映射文件

    创建内存映射文件 CreateFileMapping 将上述真正存在的文件(物理文件) hFile映射成为一个虚拟...

  • Linux c++ 内存管理知识索引

    背景知识 虚拟内存和物理内存之间依靠mmu进行映射 一.虚拟内存管理 在32为的cpu 上, 有4G的虚拟内存空间...

  • linux io与zero copy

    1. 物理内存与虚拟内存 1.1 物理内存 物理内存指通过物理内存条而获得的内存空间。 1.2 虚拟内存 虚拟内存...

  • Android 内存管理

    概述 虚拟内存2.1 分页2.2 内存映射 内存不足时的处理3.1 kswapd3.2 LMK 虚拟机4.1 堆空...

  • 程序的装载

    程序被装载的过程: 创建独立的虚拟内存空间,建立虚拟空间与物理内存的映射关系。在Linux中,程序被运行起来后,将...

网友评论

    本文标题:3.1、创建虚拟内存到物理内存或文件的映射

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