注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

Visual Studio 2013 输出c++内存布局的未公开编译选项(/d1 reportAllClassLayout)类似linux pahole命令  

2014-01-20 14:23:45|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Linux下面的pahole命令可以直观的打印出c++对象的内存布局,cache line那些。
不过vc里面没有方便的命令。不知道一些调试命令行不行,类似gdb ptype那些。
好像windbg 有个 dt 命令。不知道 vc的调试器,有没有类似的命令??

不过在网上找到一个微软c++编译器的一个未公开选项,可以生成所有的对象的内存布局。

这种工具可以方面有何程序内存的使用,布局和cache之类的优化吧。



Visual Studio 2008 和 Visual Studio 2013里面下面这个选择都可以使用
cl /d1 reportAllClassLayout sourc_name.cpp
其实就是使用命令行的不公开的编译选项, 在Visual Studio的IDE里面,可以直接
右键 cpp源码文件,然后选“property” ->"c/ c++ " -> "Command line" 
里面手工添加  /d1 reportAllClassLayout  这个,然后点compile就可以了。
直接用命令行cl.exe的话,有可能头文件包含目录没设置跟麻烦。

就会输出所有c++类型的内存布局.像下面这样,不过还是没有 linux的pahole命令的结果好看啊。
1>  class ?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@ size(176):
1>   +---
1>   | +--- (base class ?$basic_iostream@DU?$char_traits@D@std@@)
1>   | | +--- (base class ?$basic_istream@DU?$char_traits@D@std@@)
1>   0 | | | {vbptr}
1>   8 | | | _Chcount
1>     | | | <alignment member> (size=4)
1>   | | +---
1>   | | +--- (base class ?$basic_ostream@DU?$char_traits@D@std@@)
1>  16 | | | {vbptr}
1>   | | +---
1>     | | <alignment member> (size=4)
1>     | | <alignment member> (size=4)
1>   | +---
1>  24 | ?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@ _Stringbuffer
1>     | <alignment member> (size=4)
1>     | <alignment member> (size=4)
1>   +---

记得做完之后把这个选项关了吧


有人还提到这个,但我实际测试发现无论是2008还是2010里面都没有支持这个选项。
cl /d1 reportSingleClassLayout ClassName source_name.cpp  
  评论这张
 
阅读(599)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017