zoukankan      html  css  js  c++  java
  • c++类的内存布局

    问题:

      考察了reinterpret_cast和static_cast的区别。顺道发现了一个可以查看c++内存布局的工具(在VS中)。

    结果:

      前两个输出的地址形同,后一个不同。

    class A{int m;};
    class B{int m;};
    class C: public A, public B{};
    C c;
    int main()
    {
        printf("%p, %p, %p", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));
        return 0;
    }

    1)选择类文件上右键属性:

    2)先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),

    则只会打出指定类XXX的内存布局。近期的VS版本都支持这样配置。

    3)看到结果:

     

    结果分析:

      因为static_cast提供了更加安全的静态类型转换,将C类型的地址使用B类型指向后,会在原来C的地址基础上便宜4个字节刚好是B类型的地址。

      However,reinterpret_cast提供的是不安全的类型装换,它仅仅是把c的地址copy了一下,就强行复制给B类型的指针了。

  • 相关阅读:
    myeclipse的git插件安装
    安装虚拟机和Linux系统
    Windows 10快速在指定目录打开命令行
    更新Maven的本地库
    Maven安装
    html全屏显示
    除法保留两位小数
    springmvcjson中文乱码处理
    office2016 下载直通车
    JAVA面向对象编程深入理解图
  • 原文地址:https://www.cnblogs.com/luntai/p/6437119.html
Copyright © 2011-2022 走看看