问题标签 [virtual-memory]
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.
windows - 在 Windows 中是否可以将部分内存用作虚拟文件
我正在使用命令行工具对文件进行一些处理。问题是这个文件不应该存储在磁盘上(安全原因)。所以我想知道在 Windows 中是否可以将一部分内存用作虚拟文件,该虚拟文件可以通过命令行工具访问,就好像它是一个真实的物理文件一样。
c - 需求寻呼背景下的神秘数字“63”
我正在运行一个模仿需求分页系统的代码,这里有一些参数:
我使用先进先出或随机页面替换算法运行我的代码,页面帧数设置为 100。我的磁盘读/写以 63 结束。
然后,当我将处理器大小更改为 32 位时 - 此边界移动到 16。
后一种情况,我理解。如果页帧计数超过可能的页表条目,则 (2^4) 不需要驱逐。
但我不明白为什么在前一种情况下,页表条目上升到 2^20,磁盘读/写在 63 处停止,两种页面替换算法。
这个神秘的 63 号码是什么?知道这可能来自哪里吗?谢谢你。
c++ - 内存映射文件 std::allocator 实现冻结 WM6 设备
我有一个适用于 Windows Mobile 6.x 的 Visual Studio 2008 C++ 项目,我需要比 32MB 进程槽中可用的内存更多的内存。所以,我正在考虑使用内存映射文件。我创建了一个标准分配器实现,用CreateFileMapping和MapViewOfFile替换 new/delete 。
预期用途是这样的:
使用std::allocator
,我可以在该示例中获得 28197 次迭代,然后再出现std::bad_alloc
异常。使用MappedFileAllocator
,在设备完全冻结并且必须重新启动之前,我得到了 32371 次迭代。由于我的设备有 512MB 的 RAM,我希望能够从该循环中获得更多的迭代。
我的MappedFileAllocator
实现是:
任何人都可以建议我的MappedFileAllocator
实施可能出错的地方吗?
谢谢,保罗
c - C程序在HP-UX上查找进程使用的虚拟内存?
在一次采访中,有人问我这个问题:
- 编写一个简单的 C 程序来查找 unix (HP-UX) 上正在运行的进程使用的虚拟内存
我告诉他们我不太确定,但也提出了一些想法,例如:
- 可能我们可以使用
getpid
系统调用获取进程 ID 并使用它stat
并获得所需的输出 - 或者我们可以运行
system
函数调用,在里面我们可以使用 shell 命令ps
并获取详细信息。
也许我不正确;有人可以帮我吗?
unix - 虚拟地址
假设我正在启动同一程序的两个实例。两个程序的文本区域是否具有相同的虚拟地址?
architecture - 计算页面大小和段大小
在分页分段系统中,我们有 32 位的虚拟地址和 12 位的偏移量,11 位的段和 9 位的页码。我们如何计算页面大小,最大段大小和最大段大小数?
linux-kernel - 如何从 Linux 内核中的任意地址获取结构页面
我有现有的代码,它获取列表struct page *
并构建描述符表以与设备共享内存。该代码的上层当前期望使用vmalloc
用户空间或从用户空间分配的缓冲区,并用于vmalloc_to_page
获取相应的struct page *
.
现在上层需要处理各种内存,而不仅仅是通过vmalloc
. 这可能是使用 获得的缓冲区kmalloc
、内核线程堆栈内的指针或我不知道的其他情况。我唯一的保证是这个上层的调用者必须确保有问题的内存缓冲区在那个时候被映射到内核空间中(即此时所有的访问都是有效的buffer[i]
)0<=i<size
。如何获得struct page*
与任意指针对应的?
把它放在伪代码中,我有这个:
我现在需要改变upper_layer
以应对任何有效的缓冲区(不改变lower_layer
)。
我发现virt_to_page
,Linux 设备驱动程序指示在“逻辑地址,[不是]来自内存vmalloc
或高内存”上运行。此外,is_vmalloc_addr
测试一个地址是否来自vmalloc
,并virt_addr_valid
测试一个地址是否是一个有效的虚拟地址(用于virt_to_page
; 这包括kmalloc(GFP_KERNEL)
内核堆栈)。其他情况呢:全局缓冲区、高内存(总有一天会出现,尽管我现在可以忽略它),可能还有其他我不知道的类型?所以我可以将我的问题重新表述为:
- 内核中的所有类型的内存区域是什么?
- 我如何区分它们?
- 我如何获取它们中的每一个的页面映射信息?
如果重要的话,代码在 ARM 上运行(带有 MMU),内核版本至少为 2.6.26。
c# - 当 C# 中的 RAM 结束时会发生什么?
我不是计算机专家,所以让我试着更具体地提出这个问题:
我做了一些科学计算,计算有时需要大量内存来存储结果。几天前,我有一个在硬盘上占用 4 GB 的输出文件,但我有这么多的 RAM。所以:
- 当您正在运行的程序分配的内存比计算机中可用的内存多时,CLR(或者是其他什么东西?)如何处理内存?它会在高清中创建一些交换吗?(我知道这可能会减慢我的程序,但我只对内存问题感兴趣)
- 它是否依赖于操作系统,比如我是在 linux 上使用 MONO 还是在 Windows 上使用 VS?
提前致谢!
eclipse - Eclipse INI 配置问题
我正在做一个非常大的项目,即使我增加了虚拟内存,在刷新项目时,Eclipse 也会崩溃。错误是java heap space error。
这是当前的设置:
如果我再增加它,Eclipse 将无法启动。
linux-kernel - 32 位和 64 位内核上的 zone_NORMAL 和 ZONE_HIGHMEM
我试图使 linux 内存管理更加清晰,以用于调整和性能目的。
通过阅读IBM 网站上的这本非常有趣的红皮书“Linux 性能和调优指南”,我发现了一些我不完全理解的东西。
在 IA-32 等 32 位架构上,Linux 内核只能直接寻址物理内存的第一个 GB(考虑保留范围时为 896 MB)。所谓上面的内存
ZONE_NORMAL
必须映射到下面的1 GB。这种映射对应用程序是完全透明的,但分配内存页面ZONE_HIGHMEM
会导致性能下降。
- 为什么896 MB以上的内存必须映射到较低的1GB?
- 为什么分配内存页面会影响性能
ZONE_HIGHMEM
? - 那有什么
ZONE_HIGHMEM
用呢? - 为什么能够识别高达 4gb (
CONFIG_HIGHMEM=y
) 的内核只能使用第一个千兆字节?
提前致谢