Linux 当映射文件';在过程图中没有显示什么?

Linux 当映射文件';在过程图中没有显示什么?,linux,memory-management,process,executable,Linux,Memory Management,Process,Executable,我试图gdb一个函数,使用它的callstack,调用的一个属于地址a4734000-a4e93000,所以我检查了/proc//maps文件,发现有: a4734000-a4e93000 r-xp 00000000 00:00 0 a4ee0000-a527c000 r-xp 00000000 00:00 0 这对我来说没有意义,因为通常它会显示为可执行地址映射的目标二进制文件。有人知道这是什么把戏吗?非常感谢。权限字段r-xp包含p,因此这些映射是私有的。路径字段为空,因此这些映射是匿名

我试图gdb一个函数,使用它的callstack,调用的一个属于地址a4734000-a4e93000,所以我检查了/proc//maps文件,发现有:

a4734000-a4e93000 r-xp 00000000 00:00 0 
a4ee0000-a527c000 r-xp 00000000 00:00 0

这对我来说没有意义,因为通常它会显示为可执行地址映射的目标二进制文件。有人知道这是什么把戏吗?非常感谢。

权限字段
r-xp
包含
p
,因此这些映射是私有的。路径字段为空,因此这些映射是匿名的

因此,这些是私有匿名映射,使用
MAP\u ANON
MAP\u private
标志创建。它们可能是由以下因素造成的:

当分配大于MMAP_阈值字节的内存块时,glibc malloc()实现使用MMAP(2)将内存分配为私有匿名映射


另请参见问题和。

感谢@g-v,这是一个很好的答案。但我仍然无法理解为什么malloc创建的内存将具有“x”权限??请参见和例如。POSIX:“实现可能允许除prot指定的访问之外的其他访问”。Linux:“PROT_EXEC是否具有与PROT_READ不同的效果取决于处理器体系结构、内核版本和进程状态”。换句话说,这是您的硬件(可能不支持页面的单独PROT_EXEC标志)或软件的限制。