首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内存映射函数mmap与匿名内存

    学习系列:《APUE14.8》《CSAPP9.8.4》 1 总结 memory-mapped io可以将文件映射到内存中的buffer,当我们从buffer读写数据时,其实操作的是对应文件中的数据...mmap也可以直接映射匿名内存块,无需提供文件fd,直接申请一块内存给当前进程使用,也可以选择继承给子进程。注意匿名映射不会真的创建文件,只是拿到了一块填充0的内存。...与共享内存这种传统IPC相比,mmap匿名内存更为灵活,Postgresql使用的共享内存全部是用mmap申请的,只用共享内存申请一个PGShmemHeader结构的大小。...MAP_HUGETLB 使用内存大页。...匿名映射的优点: 没有虚拟地址空间碎片,取消映射后,内存立即归还给系统。 与全局堆分开。 可以给子进程继承使用。 匿名映射的缺点: 不能调整大小!

    2.1K30

    Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

    文章目录 一、Linux 内核 动态分配内存 系统接口函数 二、统计输出 vmalloc 分配的内存 一、Linux 内核 动态分配内存 系统接口函数 ---- Linux 内核 " 动态分配内存 "...是通过 " 系统接口 " 实现的 , 下面介绍几个重要的 接口函数 ; ① 以 " 页 " 为单位分配内存 : alloc_pages , __get_free_page ; ② 以 " 字节 " 为单位分配..." 虚拟地址连续的内存块 " : vmalloc ; ③ 以 " 字节 " 为单位分配 " 物理地址连续的内存块 " : kmalloc ; 注意 该 " 物理地址连续的内存块 " 是以 Slab 为中心的...; 二、统计输出 vmalloc 分配的内存 ---- 执行 grep vmalloc /proc/vmallocinfo 命令 , 可以统计输出 通过 vmalloc 函数分配的 " 虚拟地址连续的内存

    5.2K30

    Linux内存描述之高端内存--Linux内存管理(五)

    把0~3G分给用户进程、3~4G就能很好的解决这个问题.这样一来就是你用户程序里的所有变量和函数的 逻辑地址都是介于0~3G的,内核代码里所有变量和函数的逻辑地址都是介于3~4G的 所谓用户空间和内核空间...对于高端内存,可以通过 alloc_page() 或者其它函数获得对应的 page,但是要想访问实际物理内存,还得把 page 转为线性地址才行(为什么?...() 或者其它函数获得对应的 page,但是要想访问实际物理内存,还得把 page 转为线性地址才行(为什么?...每个页描述符都有到内存节点和到节点管理区的连接(被放在flag的高位字段)。 内核调用一个内存分配函数时,必须指明请求页框所在的管理区,内核通常指明它愿意使用哪个管理区。...常用的请求页框和释放页框函数: alloc_pages(gfp_mask, order): 获得连续的页框,返回页描述符地址,是其他类型内存分配的基础。

    12.4K23

    linux网络编程之共享内存简介和mmap 函数

    即每个进程地址空间都有一个共享存储器的映射区,当这块区域都映射到相同的真正的物理地址空间时,可以通过这块区域进行数据交换,例如共享库就是这么实现的,很多进程都会使用同一个函数如printf,也许在真正的物理地址空间中只存在一份...二、mmap 函数 #include 功能:将文件或者设备空间映射到共享内存区。...当进程终止时,该进程的映射内存会自动解除,也可以调用munmap解除映射: 功能:取消mmap函数建立的映射 原型 int munmap(void *addr, size_t len); 参数...simba@ubuntu:~/Documents/code/linux_programming/UNP/system_v$  再次将文件test 映射到内存,然后从内存读取到了文件的内容。...参考: 《linux c 编程一站式学习》 《UNP》

    1.9K10

    linux网络编程之POSIX 共享内存和 系列函数

    在前面介绍了system v 共享内存的相关知识,现在来稍微看看posix 共享内存 和系列函数。...共享内存简单来说就是一块真正的物理内存区域,可以使用一些函数将这块区域映射到进程的地址空间进行读写,而posix 共享内存与system v 共享内存不同的是它是用虚拟文件系统(tmpfs)实现的,已经挂载在...man 7 shm_overview 下面来看系列函数,编译时候加上 -lrt 选项,即连接librt 库 (实时库) 功能:用来创建或打开一个共享内存对象 原型 int shm_open(const...(255) oflag:与open函数类似,可以是O_RDONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_TRUNC等。...;失败返回-1 在前面曾经介绍了mmap 函数 将文件映射到进程地址空间的作用,其实它还可以将共享内存对象映射到进程地址空间,类似shmat的作用,只是传入的文件描述符fd 是shm_open 返回的

    1.7K00

    内存操作函数

    前言 个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: c语言进阶 个人信条: 知行合一 本篇简介:>:介绍c语言中有关内存操作函数的知识....num 要复制的字节数 函数头文件: #include 函数功能: 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。...num 要复制的字节数 函数作用: 该函数与memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠 的。...如果源空间和目标空间出现重叠,就得使用memmove函数处理,其实在有的编译器中,对于memcpy函数也进行了优化,也是允许内存重叠的. 但牛牛认为,还是有必要掌握这种更"稳妥"的函数的....好了,今天的内存操作函数就讲到这里了,我们下周再见! 最后,如果文章对大家有帮助的话,求一波三连吧! 886

    49220

    Linux - Linux内存管理

    移除交换空间 ---- 概念 内存管理是Linux系统重要的组成部分。...为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。...当需要用到原始内容时,这些信息会被重新从交换空间读入物理内存Linux内存管理采取的是分页存取机制。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存。...其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存中,Linux内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到虚拟内存中。

    52.3K41

    Linux内存描述之内存节点node--Linux内存管理(二)

    CPU访问本地内存的速度比访问远程内存的速度要快 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大....因此linux内核需要用一种体系结构无关的方式来表示内存....分配内存操作时的区域顺序,当调用free_area_init_core()时,由mm/page_alloc.c文件中的build_zonelists()函数设置 nr_zones 当前节点中不同内存域zone...如果内核编译只支持当个结点(即使用平坦内存模型), 则没有结点位图, 上述操作该位图的函数则变成空操作, 其定义形式如下, 参见include/linux/nodemask.h?...这些节点都放在该链表中,均由函数init_bootmem_core()初始化结点 那么内核提供了宏函数for_each_pgdat(pgdat)来遍历node节点, 其只需要沿着node_next以此便立即可

    7.8K21

    Linux内存描述之内存页面page--Linux内存管理(四)

    1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...简单来说, 页是一个数据块, 可以存放在任何页框(内存中)或者磁盘(被交换至交换分区)中 我们今天就来详细讲解一下linux下物理页帧的描述 2 页帧 内核把物理页作为内存管理的基本单位....函数EXPORT_SYMBOL使得内核的变量或者函数可以被载入的模块(比如我们的驱动模块)所访问....其次标识的函数接口也变了, 早期的内核中, 针对每个宏标识都设置了一组test/set/clear, 参见/include/linux/mm.h?...因此内核提供了两个辅助函数 http://lxr.free-electrons.com/source/include/linux/pagemap.h?

    8.3K11

    Linux内存描述之概述--Linux内存管理(一)

    2 (N)UMA模型中linux内存的机构 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大. 因此linux内核需要用一种体系结构无关的方式来表示内存....而内存管理的其他地方则认为他们就是在处理一个(伪)NUMA系统. 2.2 Linux物理内存的组织形式 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点..., 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 为了解决这些制约条件,Linux使用了三种区:...函数EXPORT_SYMBOL使得内核的变量或者函数可以被载入的模块(比如我们的驱动模块)所访问. 2.5 内存页page 大多数内核(kernel)的操作只使用ZONE_NORMAL区域,系统内存由很多固定大小的内存块组成的...2.6 高端内存 由于能够被Linux内核直接访问的ZONE_NORMAL区域的内存空间也是有限的,所以LINUX提出了高端内存(High memory)的概念,并且允许对高端内存的访问

    6.9K30

    Linux内存管理

    本篇介绍 本篇介绍下Linux内存管理,用系统角度看内存的寻址和分配机制。 内容介绍 内存管理应该是系统中最难的模块之一了,而且历史也悠久,就先来简单回顾下。...分页机制可以完全避免内存碎片问题么? 公布下答案: 的确有分页机制就可以完全不需要分段机制,目前linux是在分段的基础上实现了分页,这个也有考虑到是兼容性问题。...int order) unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) 释放物理内存函数如下: extern void...mmap流程如下: image.png 缺页异常 linux 是在不得不使用物理内存的时候才会分配物理内存。这句话该怎么理解呢?...缺页异常处理的核心函数是do_page_fault, 实现流程如下: image.png 页面回收 当我们看到可用物理内存不是太多的时候可用不用急着换更大的内存,因为对于系统,如果物理内存够的话,会尽量用物理内存

    13.7K51

    【C语言】内存管理&&内存管理函数&&文件管理&&文件管理函数

    (静态区),数据段的特点是在上面创建的变量,直到程序结束才销毁,所以生命周期变长 2.内存相关的函数 2.1 memcpy 2.1.1 memcpy函数的使用 strcpy函数我们可能都知道,字符串拷贝函数...C语言的标准规定: 不重叠内存的拷贝,可以使用memcpy,重叠内存的拷贝就不能使用了 重叠内存的拷贝,我们可以使用memmove函数来实现 2.2.2 memmove函数的使用 同样的,...void * memset ( void * ptr, int value, size_t num ); memset函数是以字节为单位设置内存函数 将 ptr 指向的内存块的第1个字节(num)...,那么就可以很方便的使用calloc函数来完成任务 3.2.3 realloc realloc函数的出现让动态内存管理更加灵活 realloc函数可以做到对动态开辟内存大小的调整 函数原型如下: void...返回值为调整之后的内存起始位置 这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间 realloc开辟空间也可能会失败,失败的时候返回NULL realloc在调整内存空间的时候存在两种情况

    13710
    领券