- 博客(269)
- 资源 (45)
- 收藏
- 关注
原创 C++ 内存布局 - Part6: 虚继承
虚继承可以在菱形继承体系中,防止派生类中有多份重复祖基类内容。如下图所示,如果是常规继承,Class Final中会有两份Class Base的内容。通过虚继承,即Derived1 虚继承自Base, Derived2 也虚继承自Base, 那么Final中将最终保留一份Base部分的内容。
2024-10-17 13:34:52
887
原创 C++ 内存布局 - Part5: 继承关系中 构造析构与vptr的调整
当delete这个派生类对象时,首先执行派生类的析构函数,此时对象的vptr仍然执行派生类的虚表,派生类的析构函数会继续执行基类的析构函数,此时对象的vptr会指向基类的虚表。当new一个派生类对象时,首先会执行基类的构造函数,这时这个构造中的对象,其vptr指向基类的虚表,当基类部分构造完毕,继续执行派生类的构造函数时,此时对象的vptr指向派生类的虚表。从结果中可以看到, 在执行Base部分的构造和析构时,vptr指向的是基类的虚表,指向Derived部分的构造和析构时,vptr指向的是派生类的虚表。
2024-10-14 11:35:45
299
原创 C++ 内存布局 - Part4: 多继承与this指针调整
可见,Base2中被重写的Derived::fooC() 函数指针被放到了_vptr.Base1虚表之中,没有被重写的Base2::fooD() 依然存放在_vptr.Base2。可见,是将指向Base2部分的指针向上偏移16,指向Derived对象的内存起始地址,从而访问到Base1部分虚表里的Derived::fooC()将会对当前的this指针(b2ptr)向上偏移到Derived对象起始地址。
2024-08-20 19:45:24
566
原创 C++ 内存布局 - Part3: 隐式转换为基类指针
如果new一个派生类对象,把new之后的指针赋值给基类指针,那这个基类指针指向哪里,一定是这个派生类对象的起始地址吗?【答案】赋值给基类指针以后,这个基类指针会指向派生类对象中这个基类部分的起始地址,编译器自动进行了指针偏移操作。
2024-08-16 22:46:43
406
原创 C++ 内存布局 - Part2: 从内存布局角度看类型转换 static_cast, dynamic_cast, reinterpret_cast
开门见山,先把结论写在这里:1)static_cast 在做基类指针和派生类指针之间的转换时,会根据编译时的静态偏移操作指针,但是没有运行期的类型安全检查,程序员需要自己确保类型的正确性,比如派生类指针确实指向了派生类对象。2)dynamic_cast 依赖于虚表做运行期类型检查,适用于有虚函数的类型转换。3)reinterpret_cast是最不安全的类型转换,完全暴力强制转换。
2024-08-16 15:19:27
1115
原创 C++ 内存布局 - Part1: typeid, typeinfo及单继承
typeinfo中存储的是关于类型的信息,可以通过以下代码都是在X86_64 Linux中完成,g++编译。可见,在没有虚函数的情况下,即使指针 ptr实际指向的是派生类对象,但是没有虚表的帮助,只能返回编译器静态类型,也就是基类类型。[有虚函数的类继承]
2024-08-13 13:51:25
651
原创 C11与C++11关于Atomic原子类型的异同
头文件C11 使用。C++11 使用。数据类型C11 使用atomic_int等_Atomic类型定义。C++11 使用模板类。初始化C11 推荐使用宏进行初始化,也可以直接赋值。C++11 通过构造函数直接初始化。操作函数C11 使用标准库函数,如。C++11 使用类成员函数,如storeload。编译参数C11 需要使用-std=c11。C++11 需要使用-std=c++11。
2024-06-17 09:51:39
625
转载 GNU C 宏构造利器:语句表达式
GNU C 对 C 标准作了扩展,允许在一个表达式里内嵌语句,允许在表达式内部使用局部变量、for 循环和 goto 跳转语句。这样的表达式,我们称之为语句表达式。({ 表达式1;表达式2;表达式3;})语句表达式最外面使用小括号()括起来,里面一对大括号{}包起来的是代码块,代码块里允许内嵌各种语句。语句的格式可以是 “表达式;”这种一般格式的语句,也可以是循环、跳转等语句。跟一般表达式一样,语句表达式也有自己的值。语句表达式的值为内嵌语句中最后一个表达式的值。我们举个例子,使用语句表达式求值。
2024-06-14 16:08:05
173
转载 [转载] linux内核中GNU C和标准C的区别
linux 系统上可用的C编译器是GNU C编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C进行进一步扩展,以增强标准C的功能。
2024-06-14 15:09:25
164
原创 Netfilter/iptables
其中:etables作用域数据链路层,arptables针对ARP, iptables/ip6tables针对IP层。nftables 是新的包过滤组件.nft是相对应的新的用户态组件,用于替换etables,arptables,iptables,ip6tables.
2024-06-02 19:58:29
396
原创 GDB调试Linux内核模块
调试内核模块与调试内核类似,一点区别是内核模块需要单独编译,编译时注意加入符号信息。在调试机进行远程调试时,需要载入这些符号信息,同时需要指定模块在内核中的地址。
2024-05-22 19:45:26
861
原创 SO_REUSEPORT 之 TCP负载均衡验证
首先启动两个tcp server, 代码里开启 SO_REUSEPORT。从回复的server 进程id 可见,负载均衡做的很好。
2024-05-21 11:33:17
473
原创 VirtualBox虚拟机串口通信
设置方式就是在VirtualBox的设置里面设置串口,需要注意的是其中一台不勾选“连接至现有通道或套接字”,另外一台勾选,不勾选的那台需要先启动。在其中一台执行 cat /dev/ttyS0 ,另外一台执行 echo "hello world" > /dev/ttyS0。可以看到在执行cat /dev/ttyS0 的机器同步输出。现在希望两台CenOS虚拟机能通过串口通信。两台Guest虚拟机: CentOS。设置前先关闭两台虚拟机。
2024-05-16 13:10:46
927
原创 Docker安装配置
1) 查找镜像,如果有阿里云账号,那么:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors。参照:https://docs.docker.com/config/daemon/systemd/#httphttps-proxy。通过docker info可以查看是否已经生效。通过docker info可以查看是否已经生效。然后可以执行docker build。Docker中国区官方镜像。
2024-03-22 11:46:01
430
原创 k8s 集群安装(vagrant + virtualbox + CentOS8)
主机环境:windows 11k8s版本:v1.25dashboard版本:v2.7.0calico版本: v3.26.1CentOS8版本:4.18.0-348.7.1.el8_5.x86_64##################### 所有节点都需要执行的操作 开始 #################ssh配置:配置centos yum源:如果需要设置代理:增加一行:### 升级内核:安装完以后reboot。
2023-10-07 15:11:04
981
原创 hugging face inference API返回内容太短的问题
【代码】hugging face inference API返回内容太短的问题。
2023-09-01 10:35:20
436
原创 CentOS救援模式(Rescue Mode)及紧急模式(Emergency Mode)
当CentOS操作系统崩溃,无法正常启动时,可以通过救援模式或者紧急模式进行系统登录。启动CentOS, 当出现下面界面时,按e进入编辑界面。在编辑界面里,加入参数:systemd.unit=rescue.target ,然后Ctrl-X启动进入救援模式。在编辑界面里,加入参数:systemd.unit=emergency.target, 然后Ctrl-X进入紧急模式。
2023-03-01 11:14:25
8485
原创 添加动态库运行期搜索目录
gcc - I don't understand -Wl,-rpath -Wl, - Stack Overflow运行时动态库:not found 及介绍-Wl,-rpath_Homejim的博客-优快云博客_rpath
2022-01-25 16:27:54
368
转载 TCP connection queue and backlog parameters
原文: https://www.programmersought.com/article/3841592816/There is one hereSO_BACKLOGParameters, this article explains the specific use of this parameter.TCP connection queueLet's take a look at the TCP three-way handshake process:When the client s
2021-05-10 09:33:59
271
原创 linux网卡多队列
RSS: Receive Side ScalingRPS: Receive Packet SteeringRFS: Receive Flow SteeringAccelerated Receive Flow SteeringXPS: Transmit Packet Steering
2020-05-25 15:58:52
357
gcc依赖文件gmp4.3.2+mpfr2.4.2+mpc0.8.1
2018-10-18
scikit-learn 0.17安装包for python3.5 win32
2016-11-18
graphite0.9.9相关安装包
2014-11-09
cas-server-webapp
2013-12-08
spring MVC 初始启动blocking queue
2013-07-31
spring mvc restful service
2013-07-30
springMVC+mybatis+jpetstore工程源码
2013-05-13
mondrian xmla配置需要的jar
2013-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人