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类型的指针了。

  • 相关阅读:
    PC端Vue后台管理系统request.js结合业务封装axios
    从零开始学 Web 之 Vue.js(五)Vue的动画
    css实现左右两个div等高
    css样式优先级计算规则
    jquery中attr和prop区别
    table文字溢出显示省略号问题
    2020-12-15
    2020-12-14
    2020-12-11
    2020-12-10
  • 原文地址:https://www.cnblogs.com/luntai/p/6437119.html
Copyright © 2011-2022 走看看