问题标签 [vmalloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - kmallc 和 vmalloc 返回逻辑地址?
虽然 kmalloc 和 vmalloc 上已经有很多线程在运行,但我没有得到确切的答案,所以我把它放在这里。
据我所知,
kmalloc :它是内核 API,它分配物理以及虚拟连续的内存。
vmalloc :它是内核 API,它分配物理上不连续但实际上是连续的内存。
现在我的问题是:在这两种情况下(kmalloc 或 vmalloc)地址或说两个 API 返回的指针是逻辑地址正确吗?
在 linux 内核中,内存管理对我来说一直是灰色的部分,所以如果我的理解有误,请纠正我。
memory-management - 为什么物理上连续的内存区域比虚拟连续的内存更有效。?
据说物理连续内存区域比虚拟连续内存更有效,因为 Robert Love 的书说内核不需要为物理连续内存设置页表条目。
但是内核不是在所有情况下都需要页表吗?因此,在虚拟连续内存的情况下,它需要创建哪些页表条目。
ios - UIImagePngRepresentation 有时会导致内存泄漏
我的代码显示出奇怪的行为,我搜索了几个小时都没有运气。
我的代码片段:
如您所见,我将图像保存到本地文件夹,当我需要它时,我从本地文件夹的加载图像中加载它并使用 UIImagePNGRepresentation 将其转换为 NSData
奇怪的是,对于某些图像,它按我的预期工作。但是,对于某些图像,内存不会被释放。(用分配工具检查。堆不断上升)
看到第一个还活着的点了吗?查了一下历史,顺利的话应该是这样的
对于有问题的图像,是这样的
两个alloc,一个dealloc ..我想这是问题,但我不知道为什么它只发生在特定图像上。当我检查堆栈跟踪时,我想这意味着 UIImagePNGRepresentation 是问题,但我不知道这究竟意味着什么,所以我将附加堆栈跟踪。
任何帮助将不胜感激!!谢谢!!
linux-kernel - 如何检索任何模块先前使用的内存地址vmalloc()?
首先,vmalloc() 被任何模块多次调用。其中一些地址已被释放,一些尚未被释放,还有一些正在泄漏。
然后,模块驱动程序需要检测这些地址的状态,即这些地址是否已释放、未释放或泄漏?
驱动程序需要检索这些地址。您知道这些地址在哪里,以及如何检索它们吗?
memory-management - linux kernel vfree() 如何同步主内核页表和进程的页表?
我知道vmalloc()是怎么做的。当一个进程(在内核空间)想要访问属于vmalloc()的内存时,会发生页面错误并进行同步。</p>
但是当它调用vfree()时,进程如何更新它的页表以与主内核页表同步?或者我对它有一些理解。
谢谢。
linux - vmalloc - 在页面错误时更新另一个进程的页表
我在阅读 Mel Gorman 的《Understanding the Linux Virtual Memory Manager》一书时遇到了一个问题,即为什么进程的页表会因为访问 vmalloc()ed 区域而被更新。这是他用来解释此过程的图表的链接:
Vmalloc 由一个进程完成,另一个进程访问 vmalloc()ed 区域
在这种情况下更新的页表是主参考内核页表,而不是进程 A 的页表。我的问题是为什么进程 B 甚至访问进程 A 的 vmalloc() 区域。现实世界是什么一个进程将访问另一个进程分配的内存区域的场景?问题基本上归结为:如果进程 A 分配了虚拟内存,它将在某个时候开始写入由该虚拟内存支持的物理内存。为什么另一个进程要访问那块内存?
memory-management - 了解内核中的物理和虚拟内存布局
我有一个基于 arm64 的 dragonboard410c,当它启动时,它会显示内存布局:
我找不到它的含义的解释。特别是 vmemmap 区域是什么?为什么它有两个地址间隔?另外,什么是“固定”和“记忆”区域?
我发现每当我使用带什么标志的 kmalloc nometer 时,我都会得到一个来自内存区域的地址。即使我使用 vmalloc ,我收到的地址也不是来自 vmalloc 区域。那么是否可以在内核模块中使用内存区域以外的区域?
linux - 在 Linux 内核模块中分配可执行页面
我知道在下面的链接中有一个相关的帖子,但是由于某种原因我的内核中缺少头文件 asm/pgtype_types.h(我的内核版本是 4.9.13-v8+)
您知道为什么我缺少该头文件,还是有其他方法?
非常感谢提前
kmalloc - 我们什么时候使用vmalloc和kmalloc?
我知道 kmalloc 在物理内存和虚拟内存中分配连续的内存,vmalloc 在虚拟内存中分配连续的内存,但它不能保证在物理内存中分配的内存是连续的。
因此,似乎kmalloc比vmalloc好很多。不知道我们什么时候用vmalloc,kmalloc?有人可以给我一些在现实中使用vmalloc的例子吗?
linux-kernel - vmalloc_to_page 是否返回连续的物理内存?
是否vmalloc_to_page
返回连续的物理内存?
我问是因为我看到它的返回值用于 DMA 并且 DMA 使用连续内存。
在此处查看 DMA 的 vmalloc_to_page 用法: https ://elixir.bootlin.com/linux/v5.4.70/source/drivers/mtd/nand/onenand/samsung.c#L644
然而,在vmalloc_to_page
实现中,它似乎并没有创建一个连续的分配:
https ://elixir.bootlin.com/linux/v4.5/source/mm/vmalloc.c#L234