mmap相关内容

使用MALLOC_MMAP_THRESHOLD_和MALLOC_MMAP_MAX_减少内存碎片

我一直在试验使用MALLOC_MMAP_THRESHOLD_和MALLOC_MMAP_MAX_ENV变量来影响长期运行的Python2进程中的内存管理。 请参见http://man7.org/linux/man-pages/man3/mallopt.3.html 我是从这个错误报告中得到这个想法的:http://bugs.python.org/issue11849 我得到的结果是令人鼓 ..
发布时间:2022-02-26 16:16:56 Python

mmap内存保护prot_one的用途是什么

我正在阅读mmap的documentation,发现下面一行: PROT_None可能无法访问页面。 将文件映射到内存但从不访问它有什么用处吗? 推荐答案 PROT_NONE可以实现guard pages,微软有相同的概念(MSDN)。 引用第一个链接: ..。在内存分配期间分配额外的不可访问内存 操作是一种减轻对堆的利用的技术 缓冲区溢出。这些保护页是放置在 ..
发布时间:2022-02-26 11:27:20 服务器开发

如何使用仅手动同步到磁盘的 mmap 获得检查点文件

我需要最快的方法来定期将文件与内存同步. 我想我想要一个 mmap 文件,它只能手动同步到磁盘.我不确定如何防止发生任何自动同步. 除非在我手动指定的时间,否则无法修改该文件.关键是要有一个检查点文件,它将状态的快照保存在内存中.我想尽可能避免复制,因为这需要相当频繁地调用并且速度很重要. 解决方案 mmap 不能用于此目的.没有办法阻止数据写入磁盘.在实践中,使用 mlock ..
发布时间:2022-01-22 19:59:38 其他开发

使用 GDB 检查映射地址

我正在使用我在 Linux 中的直接内存访问 上发布的驱动程序将一些物理内存映射到用户空间地址.但是,我不能使用 GDB 查看任何地址;即 x 0x12345678(其中 0x12345678 是 mmap 的返回值)失败并出现错误“无法访问地址 0x12345678 的内存". 有没有办法告诉GDB这块内存可以查看?或者,我可以在 mmap 中做些什么不同的事情(调用或 foo_mmap ..
发布时间:2022-01-20 20:18:52 其他开发

在 mmap 之后在 memcpy 中获取分段错误 SIGSEGV

我编写了一个简单的 Android 原生函数,它获取文件名和更多参数,并通过映射 (mmap) 它的内存来读取文件. 因为是mmap,所以我不需要调用“read()",所以我只是从mmap()返回的地址中memcpy(). 但是,我在某个地方得到了 SIGSEGV,可能是因为我试图访问我不允许的内存.但是我不明白为什么,我已经要求映射所有文件的内存! 我附上了我的代码和我得到的错 ..
发布时间:2022-01-12 16:06:59 移动开发

使用 mmap 读取文件到字符串

我正在尝试使用 mmap 将文件读取为字符串. 我在关注这个例子:http://www.lemoda.net/c/mmap-example/index.html 我的代码是这样的 无符号字符 *f;整数大小;int main(int argc, char const *argv[]){结构统计;常量字符 * 文件名 = argv[1];int fd = open (argv[1], ..
发布时间:2022-01-12 15:52:45 其他开发

为什么 MAP_GROWSDOWN 映射不增长?

我尝试创建 MAP_GROWSDOWN 映射并期望它会自动增长.如手册页所述: MAP_GROWSDOWN 此标志用于堆栈.它向内核虚拟内存系统指示映射应该向下扩展记忆.返回地址比内存区域低一页它实际上是在进程的虚拟地址空间中创建的.触摸映射下方“守卫"页面中的地址会导致按页面增长的映射.这种增长可以重复,直到映射增长到下一个较低的高端的一页内映射,此时触摸“保护"页面将导致SIGSE ..
发布时间:2022-01-12 15:48:01 服务器开发

numpy 与多处理和 mmap

我正在使用 Python 的 multiprocessing 模块来并行处理大型 numpy 数组.数组在主进程中使用 numpy.load(mmap_mode='r') 进行内存映射.之后,multiprocessing.Pool() 分叉进程(我猜). 一切似乎都运行良好,除了我得到如下行: AttributeError("'NoneType' 对象没有属性 'tell'",)在``忽 ..
发布时间:2022-01-12 12:33:19 Python

如何防止 MMAP 缓存值?

我编写了一个 linux 驱动程序,ioremaps 将特定设备的 PCI BAR0 导出到 sysfs 二进制属性,允许用户空间直接控制它. 当我尝试在属性之上进行 MMAP 以直接访问该位内存(从用户态程序)时,问题就出现了.读取成功并返回预期值,尽管当我写入该内存时,它似乎缓存在内核和内存之间的某处,并且没有传递到 GMCH 根联合体(因此也传递给设备).我想做的是在每次访问后都有一个 ..
发布时间:2022-01-11 23:20:06 服务器开发

升级到 Lollipop 后,Android NDK mmap 调用在 32 位设备上中断

我正在尝试获取 784 MiB 的内存.是的,我知道这对于 32 位手机来说很多,但以下调用在 Android 5.0 之前有效: mmap(0, 0x31000000, PROT_NONE, MAP_ANON | MAP_SHARED, -1, 0); 但是,在来自不同制造商的三款不同设备上,升级到 Android 5.0 打破了这一点.我认为这是 5.0 中内存分配功能的一些变化;也许需要 ..
发布时间:2022-01-10 23:39:09 移动开发

android mmap 因内存不足而失败

我到处寻找答案,但我认为我已经达到了我能找到的极限.我的问题似乎与此有关:Android NDK mmap 调用在升级到 Lollipop 后在 32 位设备上中断,但未提供任何答案. 我的问题是我尝试通过 mmap 调用从文件中映射 457232384 个字节.在装有 Android 5.1.1 的两台不同设备(三星 Galaxy Note 3 和 OnePlus One,每台 3GB R ..
发布时间:2022-01-10 23:36:59 移动开发

cuda - 零拷贝内存,内存映射文件

我正在尝试创建一个包含 uint32_ts 的映射内存文件,然后将其用作 CUDA 的零拷贝固定内存,如下所示.我在获取设备指针、分配空间并从文件映射内存时得到 cudaErrorInvalidValue.我知道错误消息(来自 API)意味着: 这表明传递给 API 调用的一个或多个参数不在可接受的值范围内. 但我很难弄清楚为什么我会遇到这个问题......有什么想法吗?提前致谢. ..
发布时间:2022-01-10 15:57:51 其他开发

在 mmap 文件中删除/插入数据

我正在编写一个 Python 脚本,该脚本映射一个文件以使用 mmap() 进行处理. 这些任务需要我更改文件的内容 替换数据 将数据添加到文件中的偏移处 从文件中删除数据(而不是删除) 只要旧数据和新数据的字节数相同,替换数据就很有效: VDATA = mmap.mmap(f.fileno(),0)开始 = 10结束 = 20VDATA[开始:结束] =“01234567 ..
发布时间:2022-01-09 12:45:07 Python

Linux下获取缓冲区的物理地址

我在 Xilinx 的 Microblaze 上使用完整的 MMU 运行 Linux 内核 3.3.我正在执行的任务要求我了解以下内容:我需要创建一个文本文件(缓冲区)并定位该缓冲区的物理地址,并且我不希望内核将此文件写入内存的不连续区域. 我需要这个的原因是因为我有一个 DMA 引擎,可以从预设的物理内存地址传输数据,所以我需要强制 Linux 在那个确切的内存位置创建缓冲区文件,这样当我 ..
发布时间:2022-01-04 22:49:12 其他开发

mmap() 熵的 ASLR 位

我正在研究 x86 系统上 mmap() 的 ASLR 随机化.我在很多地方都读到过用 mmap() 加载的地址有 16 位随机化. 但在我发现的源代码中: static unsigned long mmap_rnd(void)02 {03 unsigned long rnd = 0;0405/*06 * 32 位 mmap 中的 8 位随机性,20 个地址空间位07 * 64 位 mma ..
发布时间:2022-01-04 22:34:35 服务器开发

使用 pmap 分析进程的内存映射.[堆]

我试图了解堆栈在 Linux 中的工作原理.我读了 AMD64 ABI关于堆栈和进程初始化的部分,并且不清楚堆栈应该如何映射.这是相关的引用(3.4.1): 堆栈状态 本节描述了 exec (BA_OS) 为其创建的机器状态新流程. 和 未指定数据和堆栈段是否初始是否映射了执行权限.需要的应用在堆栈或数据段上执行代码应该正确预防措施,例如,通过调用 mprotect(). ..
发布时间:2022-01-04 22:34:15 服务器开发

madvise(___, ___, MADV_DONTNEED) 是否指示操作系统懒惰地写入磁盘?

假设我想对一个可能非常大的文件执行顺序写入. 如果我 mmap() 一个巨大的区域并在整个区域上使用 madvise(MADV_SEQUENTIAL),那么我可以以相对有效的方式写入内存.我已经开始工作了. 现在,为了在我编写时释放各种操作系统资源,我偶尔会在已经写入的小块内存上执行 munmap().我担心 munmap() 和 msync() 会阻塞我的线程,等待数据物理提交到磁盘 ..
发布时间:2022-01-04 22:29:25 服务器开发

是否可以从用户空间中找到 mmap 页面的脏度?

在 linux 2.6.30+ 下可以从用户空间访问(非共享)mmap 页面的脏污吗?欢迎针对特定平台的黑客和混搭. 理想情况下,我正在寻找一组位,每页 (4kB?) 的 mmap'ed 区域,如果自该区域被 mmap'ed 以来已写入该页面,则设置这些位. (我知道,执行写入的进程可以跟踪此信息 - 但如果内核无论如何这样做,这样做似乎很愚蠢.) 谢谢, 克里斯. ..
发布时间:2022-01-04 22:27:31 服务器开发