50得票2回答
如何在Linux用户空间中访问物理地址?

在运行Linux的ARM系统上,我有一个设备被内存映射到一个物理地址。在用户空间程序中,所有地址都是虚拟的,那么我该如何从这个地址读取内容呢?

43得票3回答
内存映射页和匿名页是什么?

我无法理解Linux中的内存映射页面和匿名页面。有人能否给出一个例子来解释一下?与此相关的内核数据结构有哪些?

33得票8回答
在Java中对一个已排序(内存映射?)文件进行二分查找

我正在尝试将一个Perl程序移植到Java,并在学习Java的过程中进行这个工作。原始程序的核心组件是一个Perl模块,它使用二进制搜索在一个超过500 GB的排序文本文件中进行字符串前缀查找(基本上,"seek"到文件中间的字节偏移量,回溯到最近的换行符,将行前缀与搜索字符串进行比较,"se...

29得票4回答
一个指针指向 C++ 寄存器是否合法?

假设C ++编译器为CPU寄存器未映射到内存的架构编译了代码。同样,让我们假设同一编译器为CPU寄存器保留了一些指针值。 例如,如果编译器出于某种原因(例如优化原因)对变量使用寄存器分配(不是register关键字),并且我们打印该变量的引用值,则编译器将返回其中一个保留的“地址值”。 那...

24得票4回答
Linux内核中的copy_from_user函数是如何工作的?

copy_from_user()函数在内部是如何工作的?它是否使用任何缓冲区或者进行内存映射,考虑到内核有权限访问用户内存空间?

22得票1回答
数据段和栈段为什么可以执行?

我刚刚注意到我的简单程序的数据和栈段是可执行的。我在/proc/[pid]/maps中看到了它,并且使用简单代码确认了它。例如:; prog.asm section .data code: db 0xCC ;int3 section .text global _start ...

22得票1回答
munmap()在使用私有匿名映射时发生ENOMEM失败

最近我发现Linux不能保证用mmap分配的内存可以用munmap释放,如果这样会导致VMA(虚拟内存区域)结构的数量超过vm.max_map_count。Manpage几乎清楚地说明了这一点: ENOMEM The process's maximum number of mappings...

15得票5回答
在内存映射文件中存在的活动C++对象

我读了Gamasutra上的一篇采访,John Carmack在其中谈到他所谓的“生活在内存映射文件中的实时C ++对象”。以下是一些引用: JC:是的。而且我从中获得了多重好处...在最后一个iOS Rage项目中,我们使用了一些聪明的技术来创建生活在内存映射文件中、由闪存文件系统支持的...

14得票3回答
在/proc/self/maps中,"---p"权限代表什么意思?

我理解rwxps位的含义。 r-xp 用于 .text,rw-p 用于 .data/.bss/heap/stack。那么只有 ---p 页面有什么用处呢? 例如,查看此命令的输出: cat /proc/self/maps 00400000-0040b000 r-xp 00000000 08...

13得票5回答
为什么16位地址和12位偏移量会导致4KB的页大小?

我正在阅读《现代操作系统》这本书,但是“页面大小”一章让我感到困惑。 在书中,作者说: “传入的16位虚拟地址被分成一个4位页号和一个12位偏移量。使用4个位于页号,我们可以有16个页面,并且使用12位偏移,我们可以寻址页面内的所有4096字节。” 为什么是4096字节?使用12位,我们...