C语言之对象(object)和变量(variable)的区别和联系

一、C语言中对象(object)的概念

注意,这里的对象可不是面向对象概念的对象哦!!!

 

参考链接:

C++ difference between variable and object

对象和变量的区别

C++变量和对象的区别联系

参考书籍:

《品悟C -- 抛弃C程序设计中的谬误与恶习》

《标准C语言指南》

Class A
   size=8 align=8
   base size=8 base align=8                                   +-------------------+
A (0x0x7f25a1c36960) 0              +---------------+         |   16(vbase_off)   |
                                    |    _vptr.B    |----+    +-------------------+
Vtable for B                        +---------------+    |    |  0(offset_to_top) |
B::_ZTV1B: 3 entries                |      B::b     |    |    +-------------------+
0     16                            +---------------+    |    |  ptr_typeinfo::B  |
8     (int (*)(...))0               |      A::a     |    +--> +-------------------+
16    (int (*)(...))(& _ZTI1B)      +---------------|         |    VTT for B      |
24                                                            +-------------------+

VTT for B
B::_ZTT1B: 1 entries
0     ((& B::_ZTV1B) + 24)

Class B
   size=24 align=8
   base size=16 base align=8
B (0x0x7f25a1acc1a0) 0
    vptridx=0 vptr=((& B::_ZTV1B) + 24)
  A (0x0x7f25a1c369c0) 16 virtual
      vbaseoffset=-24
B-in-D
                                               +-----------------------+
                                               |   20 (vbase_offset)   |
            VTT for D                          +-----------------------+
+-------------------+                          |     0 (top_offset)    |
|    vtable for D   |-------------+            +-----------------------+
+-------------------+             |            | ptr to typeinfo for B |
| vtable for B-in-D |-------------|----------> +-----------------------+
+-------------------+             |            |         B::w()        |
| vtable for B-in-D |-------------|--------+   +-----------------------+
+-------------------+             |        |   |    0 (vbase_offset)   |
| vtable for C-in-D |-------------|-----+  |   +-----------------------+
+-------------------+             |     |  |   |   -20 (top_offset)    |
| vtable for C-in-D |-------------|--+  |  |   +-----------------------+
+-------------------+             |  |  |  |   | ptr to typeinfo for B |
|    vtable for D   |----------+  |  |  |  +-> +-----------------------+
+-------------------+          |  |  |  |      |         A::v()        |
|    vtable for D   |-------+  |  |  |  |      +-----------------------+
+-------------------+       |  |  |  |  |
                            |  |  |  |  |                         C-in-D
                            |  |  |  |  |      +-----------------------+
                            |  |  |  |  |      |   12 (vbase_offset)   |
                            |  |  |  |  |      +-----------------------+
                            |  |  |  |  |      |     0 (top_offset)    |
                            |  |  |  |  |      +-----------------------+
                            |  |  |  |  |      | ptr to typeinfo for C |
                            |  |  |  |  +----> +-----------------------+
                            |  |  |  |         |         C::x()        |
                            |  |  |  |         +-----------------------+
                            |  |  |  |         |    0 (vbase_offset)   |
                            |  |  |  |         +-----------------------+
                            |  |  |  |         |   -12 (top_offset)    |
                            |  |  |  |         +-----------------------+
                            |  |  |  |         | ptr to typeinfo for C |
                            |  |  |  +-------> +-----------------------+
                            |  |  |            |         A::v()        |
                            |  |  |            +-----------------------+
                            |  |  |
                            |  |  |                                    D
                            |  |  |            +-----------------------+
                            |  |  |            |   20 (vbase_offset)   |
                            |  |  |            +-----------------------+
                            |  |  |            |     0 (top_offset)    |
                            |  |  |            +-----------------------+
                            |  |  |            | ptr to typeinfo for D |
                            |  |  +----------> +-----------------------+
                            |  |               |         B::w()        |
                            |  |               +-----------------------+
                            |  |               |         D::y()        |
                            |  |               +-----------------------+
                            |  |               |   12 (vbase_offset)   |
                            |  |               +-----------------------+
                            |  |               |    -8 (top_offset)    |
                            |  |               +-----------------------+
                            |  |               | ptr to typeinfo for D |
                            +----------------> +-----------------------+
                               |               |         C::x()        |
                               |               +-----------------------+
                               |               |    0 (vbase_offset)   |
                               |               +-----------------------+
                               |               |   -20 (top_offset)    |
                               |               +-----------------------+
                               |               | ptr to typeinfo for D |
                               +-------------> +-----------------------+
                                               |         A::v()        |
                                               +-----------------------+
0x555555755c20 <vtable for D>:  	0x0000000000000020
0x555555755c28 <vtable for D+8>:        0x0000000000000000
0x555555755c30 <vtable for D+16>:       0x0000555555755d58
0x555555755c38 <vtable for D+24>:       0x0000555555554a48
0x555555755c40 <vtable for D+32>:       0x0000555555554a60
0x555555755c48 <vtable for D+40>:       0x0000000000000010
0x555555755c50 <vtable for D+48>:       0xfffffffffffffff0
0x555555755c58 <vtable for D+56>:       0x0000555555755d58
0x555555755c60 <vtable for D+64>:       0x0000555555554a54
0x555555755c68 <vtable for D+72>:       0x0000000000000000
0x555555755c70 <vtable for D+80>:       0xffffffffffffffe0
0x555555755c78 <vtable for D+88>:       0x0000555555755d58
0x555555755c80 <vtable for D+96>:       0x0000555555554a3c
0x555555755c88 <VTT for D>:     	0x0000555555755c38
0x555555755c90 <VTT for D+8>:   	0x0000555555755cd8 -----------------------+
0x555555755c98 <VTT for D+16>:  	0x0000555555755cf8                        |
0x555555755ca0 <VTT for D+24>:  	0x0000555555755d18                        |
0x555555755ca8 <VTT for D+32>:  0x0000555555755d38                                |
0x555555755cb0 <VTT for D+40>:  0x0000555555755c80                                |
0x555555755cb8 <VTT for D+48>:  0x0000555555755c60                                |
0x555555755cc0 <construction vtable for B-in-D>:        0x0000000000000020        |
0x555555755cc8 <construction vtable for B-in-D+8>:      0x0000000000000000        |
0x555555755cd0 <construction vtable for B-in-D+16>:     0x0000555555755db8        |
0x555555755cd8 <construction vtable for B-in-D+24>:     0x0000555555554a48 <------+
0x555555755ce0 <construction vtable for B-in-D+32>:     0x0000000000000000
0x555555755ce8 <construction vtable for B-in-D+40>:     0xffffffffffffffe0
0x555555755cf0 <construction vtable for B-in-D+48>:     0x0000555555755db8
0x555555755cf8 <construction vtable for B-in-D+56>:     0x0000555555554a3c
0x555555755d00 <construction vtable for C-in-D>:        0x0000000000000010
0x555555755d08 <construction vtable for C-in-D+8>:      0x0000000000000000
0x555555755d10 <construction vtable for C-in-D+16>:     0x0000555555755d90
0x555555755d18 <construction vtable for C-in-D+24>:     0x0000555555554a54
0x555555755d20 <construction vtable for C-in-D+32>:     0x0000000000000000
0x555555755d28 <construction vtable for C-in-D+40>:     0xfffffffffffffff0
0x555555755d30 <construction vtable for C-in-D+48>:     0x0000555555755d90
0x555555755d38 <construction vtable for C-in-D+56>:     0x0000555555554a3c
0x555555755d40 <vtable for A>:  0x0000000000000000
0x555555755d48 <vtable for A+8>:        0x0000555555755de0
0x555555755d50 <vtable for A+16>:       0x0000555555554a3c
0x555555755d58 <typeinfo for D>:        0x00007ffff7dc74f8
0x555555755d60 <typeinfo for D+8>:      0x0000555555554c14
0x555555755d68 <typeinfo for D+16>:     0x0000000200000002
0x555555755d70 <typeinfo for D+24>:     0x0000555555755db8
0x555555755d78 <typeinfo for D+32>:     0x0000000000000002
0x555555755d80 <typeinfo for D+40>:     0x0000555555755d90
0x555555755d88 <typeinfo for D+48>:     0x0000000000001002
0x555555755d90 <typeinfo for C>:        0x00007ffff7dc74f8
0x555555755d98 <typeinfo for C+8>:      0x0000555555554c17
0x555555755da0 <typeinfo for C+16>:     0x0000000100000000
0x555555755da8 <typeinfo for C+24>:     0x0000555555755de0
0x555555755db0 <typeinfo for C+32>:     0xffffffffffffe803
0x555555755db8 <typeinfo for B>:        0x00007ffff7dc74f8
0x555555755dc0 <typeinfo for B+8>:      0x0000555555554c1a
0x555555755dc8 <typeinfo for B+16>:     0x0000000100000000
0x555555755dd0 <typeinfo for B+24>:     0x0000555555755de0
0x555555755dd8 <typeinfo for B+32>:     0xffffffffffffe803
0x555555755de0 <typeinfo for A>:        0x00007ffff7dc67f8
0x555555755de8 <typeinfo for A+8>:      0x0000555555554c1d

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值