- 博客(6)
- 收藏
- 关注
原创 class内存布局与原理以及dynamic_cast原理
内存布局: C有两个vftable,因为它继承了两个有虚函数的类。C::A_virt2的地址将替换C的vftable中A::A_virt2的地址,C::B_virt2将替换另一个表中B::B_virt2的地址。MSVC 通常使用_thiscall_调用约定,将类的this指针通过ecx寄存器传入成员函数中.进行定位类的实体对象static 成员函数不需要类实例,因此它们的工作方式与普通函数相同。没有_this_指针被传递给ecx寄存器。因此,无法 可靠地对静态成员函数与普通函数进行区分。 普通成
2022-07-02 04:51:28
162
原创 关于bool在结构体中所占字节的测试
#include<iostream> struct MyStruct { bool bo1; bool bo2; int num1; int num2; }; struct MyStruct m; int main() { m.bo1 = true; m.bo2 = true; m.num1 = 0x100; } 查看内存: 确实是只占一字节 但是编译器会保证字节对齐,所以会对padding进行填充 ...
2022-01-16 15:13:38
848
1
转载 C/C++中extern关键字详解
1基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int...
2022-01-14 19:36:36
1064
原创 visual studio调试cmd启动的控制应用程序
代码中添加: while (!IsDebuggerPresent()) { Sleep(5 * 1000); } 用cmd启动 下断并调试就可以了
2022-01-14 10:38:03
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人