本文旨在分析C++中虚函数的实现细节,着重于class类内部的内存空间分布
对以下类,其内存空间分布为:
1 | class A{ |
若它有一个虚函数,则其内存空间分布为:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19class A{
public:
int a;
long long b;
virtual void vfun() {};
}
sizeof(A) = 24;
high<---|---------| ->base + 0x18
| ll |
|---------| ->base + 0x10
| |int |
|---------| ->base + 0x8 vtable
| void** | ->vfptr:0x7FF684A63308 ---->|----------|
low<----|---------| ->base | void* |->0x7FF684A61070 -> vfun1
|----------|
| void* |->0x7FF684A610B0 -> vfun2
|----------|