2011-03-14 67 views
1

當我使用'vmmap'(或樂器中的Allocations工具)時,其中一行輸出是'映射文件'。我怎樣才能以編程方式獲得這個數字?如何以編程方式獲取OSX上'映射文件'的大小?

的VMMap輸出:

REGION TYPE    [ VIRTUAL] 
===========    [ =======] 
ATS (font support)  [ 32.9M] 
CG backing stores  [ 110.1M] 
CG raster data   [  64K] 
CG shared images  [ 2284K] 
Carbon     [ 3444K] 
CoreGraphics   [  8K] 
IOKit     [ 512.8M] 
MALLOC     [ 264.7M] 
Memory tag=240   [  4K] 
Memory tag=242   [  12K] 
Memory tag=243   [  12K] 
Memory tag=249   [ 192K] 
OpenGL GLSL    [ 3072K] 
STACK GUARD    [ 56.5M] 
Stack     [ 57.4M] 
VM_ALLOCATE    [ 827.7M] 
__DATA     [ 23.3M] 
__DATA/__OBJC   [  12K] 
__IMAGE     [ 1240K] 
__IMPORT    [ 732K] 
__LINKEDIT    [ 80.1M] 
__OBJC     [ 1148K] 
__OBJC/__DATA   [  12K] 
__PAGEZERO    [  4K] 
__TEXT     [ 232.2M] 
__UNICODE    [ 536K] 
mapped file    [ 38.9M] 
shared memory   [ 580K] 
shared pmap    [ 7440K] 

回答

0

「該馬赫系統調用vm_region檢索由的VMMap使用的信息」

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/vmmap.1.html

+0

我已經讀過,但這是有點....如何使用vm_region或mach_vm_region來獲取映射的文件信息?它不是立即從源代碼清楚,並且vmmap源不可用。我唯一得到的是一箇舊的論壇帖子,上面寫道:「但是,獲得與vmmap完全相同的結果是一個挑戰,因爲它會執行各種聰明的低級別事情,這些事情不會從發行版兼容到-發佈。」 – pj4533 2011-03-15 14:02:20

+0

您需要啓用mach級別的sdk並進行該調用。 – bmargulies 2011-03-15 15:30:48

0

我沒有嘗試一下的VMMap是怎麼做的,但是從我所看到的,從vm_region_recurse_64望着地區與

  • vm_region_submap_info_64.user_tag == 0,
  • 沒有在SHARED_REGION_BASE .. SHARED_REGION_BASE+SHARED_REGION_SIZE範圍
  • 與非空路徑從proc_regionfilename()

...應該是相當接近。建議更好的方式來做到這一點是值得歡迎的!

相關問題