我不知道这是否是提出这个问题的正确论坛,但我是stackoverflow的粉丝,因此决定继续在此发布。
如果我输出/ proc // smaps,我会发现几个没有任何名称的段,并且inode编号为0.根据linux内核文档,0表示没有inode与内存区域,与BSS(未初始化数据)的情况一样。
我尝试搜索BSS,但无法确切地了解它是什么。我得到的信息是BSS是负责整体化全局变量和静态变量的内存段。
我的问题是带有inode编号0的内存区域还包含什么?
我写了一个C程序,其中我得到以下内容: - (i)Malloc 4 Mb表示整数数组 (ii)Cat / proc // smaps (iii)在smaps中找到一个添加了inode编号为“0”的内存段。 (iv)将此数组的某些部分初始化为5。
STILL发现此内存段仅附加了inode编号0。另一个问题是这个内存段何时转换为堆?
答案 0 :(得分:2)
带有inode编号0的映射是匿名映射 - 实际上是那些使用MAP_ANONYMOUS
标记创建mmap()
的映射。
这只是意味着它们与磁盘文件无关。 inode数量不会改变;对于该映射,它总是保持为0.
匿名映射不会转换为堆。事实上,“[heap]”只是内核在执行时设置并由brk()
系统调用更改的匿名映射的便利标记。