首页 > TAG信息列表 > memory-mapping

Windows和Linux上的内存页写检测

我目前正在从事代垃圾收集器的工作.这意味着仅遍历最新的对象,尚存的对象(=从已知根可访问)被提升到较早的一代.当对象指向相同或较早几​​代的其他对象时,此方法正常.但是,当较旧的对象指向较新的对象,并且由于仅遍历较新的对象时,指向的对象将被错误地收集.为避免这种情况,将在

linux – munmap()使用私有匿名映射的ENOMEM失败

我最近发现,如果这导致VMA(虚拟内存区域)结构数量超过vm.max_map_count的情况,Linux不能保证使用munmap释放分配有mmap的内存. Manpage(几乎)清楚地说明了这一点: ENOMEM The process's maximum number of mappings would have been exceeded. This error can also occur for mun

Linux内核中的copy_from_user如何在内部工作?

copy_from_user()函数究竟如何在内部工作?它是否使用任何缓冲区或是否有任何内存映射,考虑到内核确实有权访问用户内存空间这一事实?解决方法:copy_from_user()的实现高度依赖于体系结构. 在x86和x86-64上,它只是直接从用户空间地址读取并写入内核空间地址,同时暂时禁用SMAP(超级用户

c – 在Linux下共享内存映射

动机 我想编写一对程序,其中一个程序读取数据并将其传输到内部格式,另一个程序将内部格式转换为其他程序.作为一个练习,我想在不使用管道的情况下编写这些程序之间的交互.我更喜欢使用信号和共享内存. 我想要的是 我有程序A和B,其中A调用B.我怎么能 >从程序A创建一个内存块 >从程序

Linux:如何将一系列物理上连续的区域映射到用户空间?

在我的驱动程序中,我有一定数量的物理上连续的DMA缓冲区(例如每个4MB长)以从设备接收数据.它们由使用SG列表的硬件处理.由于收到的数据将进行密集处理,我不想关闭缓存,我将在每个缓冲区被DMA填充后使用dma_sync_single_for_cpu. 为了简化数据处理,我希望这些缓冲区在用户空间中显示

linux – 使用mmap访问PCI-e内存空间

我在飞思卡尔MPC8308处理器(基于PowerPC架构)上使用PCI-e端口,在尝试使用它时遇到了一些问题.端点PCI-e设备的内存空间等于256 MB.我可以使用“pciutils”包轻松读写端点设备的配置空间. 在配置寄存器中写入正确的值并获得访问存储空间的权限之后;我试图通过在C中使用“mmap()”函

linux – 为什么我的Rust可执行文件映射到这样的高地址(靠近堆栈)而不是0x400000?

我正在学习x86_64系统上的Linux用户空间内存布局,并希望从某些部分打印一些地址.我使用了这个Rust代码: fn main() { let x = 3; // should be stored on stack let s = "hello"; // should be in the .data section println!("stack ≈ {:p}", &x); prin