问题标签 [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.

0 投票
1 回答
387 浏览

memory-management - kmallc 和 vmalloc 返回逻辑地址?

虽然 kmalloc 和 vmalloc 上已经有很多线程在运行,但我没有得到确切的答案,所以我把它放在这里。

据我所知,

kmalloc :它是内核 API,它分配物理以及虚拟连续的内存。

vmalloc :它是内核 API,它分配物理上不连续但实际上是连续的内存。

现在我的问题是:在这两种情况下(kmalloc 或 vmalloc)地址或说两个 API 返回的指针是逻辑地址正确吗?

在 linux 内核中,内存管理对我来说一直是灰色的部分,所以如果我的理解有误,请纠正我。

0 投票
2 回答
378 浏览

memory-management - 为什么物理上连续的内存区域比虚拟连续的内存更有效。?

据说物理连续内存区域比虚拟连续内存更有效,因为 Robert Love 的书说内核不需要为物理连续内存设置页表条目。

但是内核不是在所有情况下都需要页表吗?因此,在虚拟连续内存的情况下,它需要创建哪些页表条目。

0 投票
0 回答
318 浏览

ios - UIImagePngRepresentation 有时会导致内存泄漏

我的代码显示出奇怪的行为,我搜索了几个小时都没有运气。

我的代码片段:

如您所见,我将图像保存到本地文件夹,当我需要它时,我从本地文件夹的加载图像中加载它并使用 UIImagePNGRepresentation 将其转换为 NSData

奇怪的是,对于某些图像,它按我的预期工作。但是,对于某些图像,内存不会被释放。(用分配工具检查。堆不断上升)

第二个被释放,第一个是活着的(看代表它是活着的点)

看到第一个还活着的点了吗?查了一下历史,顺利的话应该是这样的在此处输入图像描述

对于有问题的图像,是这样的 在此处输入图像描述

两个alloc,一个dealloc ..我想这是问题,但我不知道为什么它只发生在特定图像上。当我检查堆栈跟踪时,我想这意味着 UIImagePNGRepresentation 是问题,但我不知道这究竟意味着什么,所以我将附加堆栈跟踪。 在此处输入图像描述

任何帮助将不胜感激!!谢谢!!

0 投票
0 回答
35 浏览

linux-kernel - 如何检索任何模块先前使用的内存地址vmalloc()?

首先,vmalloc() 被任何模块多次调用。其中一些地址已被释放,一些尚未被释放,还有一些正在泄漏。

然后,模块驱动程序需要检测这些地址的状态,即这些地址是否已释放、未释放或泄漏?

驱动程序需要检索这些地址。您知道这些地址在哪里,以及如何检索它们吗?

0 投票
1 回答
451 浏览

memory-management - linux kernel vfree() 如何同步主内核页表和进程的页表?

我知道vmalloc()是怎么做的。当一个进程(在内核空间)想要访问属于vmalloc()的内存时,会发生页面错误并进行同步。</p>

但是当它调用vfree()时,进程如何更新它的页表以与主内核页表同步?或者我对它有一些理解。

谢谢。

0 投票
0 回答
251 浏览

linux - vmalloc - 在页面错误时更新另一个进程的页表

我在阅读 Mel Gorman 的《Understanding the Linux Virtual Memory Manager》一书时遇到了一个问题,即为什么进程的页表会因为访问 vmalloc()ed 区域而被更新。这是他用来解释此过程的图表的链接:

Vmalloc 由一个进程完成,另一个进程访问 vmalloc()ed 区域

在这种情况下更新的页表是主参考内核页表,而不是进程 A 的页表。我的问题是为什么进程 B 甚至访问进程 A 的 vmalloc() 区域。现实世界是什么一个进程将访问另一个进程分配的内存区域的场景?问题基本上归结为:如果进程 A 分配了虚拟内存,它将在某个时候开始写入由该虚拟内存支持的物理内存。为什么另一个进程要访问那块内存?

0 投票
0 回答
1607 浏览

memory-management - 了解内核中的物理和虚拟内存布局

我有一个基于 arm64 的 dragonboard410c,当它启动时,它会显示内存布局:

我找不到它的含义的解释。特别是 vmemmap 区域是什么?为什么它有两个地址间隔?另外,什么是“固定”和“记忆”区域?

我发现每当我使用带什么标志的 kmalloc nometer 时,我都会得到一个来自内存区域的地址。即使我使用 vmalloc ,我收到的地址也不是来自 vmalloc 区域。那么是否可以在内核模块中使用内存区域以外的区域?

0 投票
0 回答
217 浏览

linux - 在 Linux 内核模块中分配可执行页面

我知道在下面的链接中有一个相关的帖子,但是由于某种原因我的内核中缺少头文件 asm/pgtype_types.h(我的内核版本是 4.9.13-v8+)

如何在 Linux 内核模块中分配可执行页面?

您知道为什么我缺少该头文件,还是有其他方法?

非常感谢提前

0 投票
0 回答
756 浏览

kmalloc - 我们什么时候使用vmalloc和kmalloc?

我知道 kmalloc 在物理内存和虚拟内存中分配连续的内存,vmalloc 在虚拟内存中分配连续的内存,但它不能保证在物理内存中分配的内存是连续的。

因此,似乎kmalloc比vmalloc好很多。不知道我们什么时候用vmalloc,kmalloc?有人可以给我一些在现实中使用vmalloc的例子吗?

0 投票
0 回答
513 浏览

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