Mar 16

研究C++的一个编译开关:-d1reportAllClassLayout 不指定

Posted by iawen at 17:01 | 程序设计 | 评论(0) | 阅读(1025) | |
编译开关:-d1reportAllClassLayout
注意:-d1,这里的是数字“1”,而不是小写的“L”。汗,我自己就犯了这个错误,老是被忽略掉,而不起作用!

另外,不是自己生成一个文件,在控制台编译时,他直接输出在了控制台窗口。所以在控制台编译时,我使用了重定位到文件:

E:\Programming\c_cpp>cl classA.cpp -d1reportAllClassLayout > class.layout
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.


E:\Programming\c_cpp>


这个开关的作用是:
引用

它可以让 MSVC 编译器(译注:至少是 MSVC 6.0 以上的版本)生成一个.layout 文件,在该文件中包含有大量的极具价值的类的布局信息,包括基类在派生类中的位置,虚函数表,虚基类表(virtual base class table),类的成员变量等信息.


以下面的代码生成示例如下:


生成的信息大致格式如下(其中属于系统调用的,我已经删除了,太多了):

class A  size(12):
  +---
0  | a
4  | b
8  | ch
    | <alignment member> (size=3)
  +---








版权所有。转载时必须以链接形式注明作者和原始出处及本声明!如果 对文章有意见,请发邮件到iawen#126.com,或者直接在博客留言。
Tags: , ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]