- 博客(8)
- 收藏
- 关注
原创 C++中类的大小与什么有关
Base类与Derived类大小都是16字节,Base是value四字节+vptr八字节+内存对齐补四字节,Derived是Base内存+key四字节20字节,但编译器会优化,让key去占用补齐的四字节,所以最后还是16字节。该Base类的大小为16字节,value占四字节,vptr占八字节,根据内存对齐要求补足四字节,所以总共为16字节。不同编译器可能会有略微不同的内存布局实现,但总的来说,虚继承的开销主要来自这些额外的指针和控制结构。我使用的GCC编译器,内存布局其实与上面说的有差异,详见这篇文章。
2025-04-01 23:54:04
853
原创 C++继承中的虚函数与虚析构
当父类中的函数被设置为虚函数,则编译器会知道这个函数有可能被子类重写,所以虚函数是动态绑定的定义:虚函数(virtual function)是一种允许派生类覆盖(override)基类中的函数声明的特性。当一个基类中的成员函数被声明为虚函数时,意味着该函数在派生类中可以被重写,从而实现多态性(polymorphism)。然后我们来讨论一下虚函数表相关的每个拥有虚函数的类都会维护一个自己的虚函数表,此时类的内存空间中的第一个成员是一个指向虚函数表的隐藏指针vptr。
2025-03-29 00:07:19
675
原创 FastDFS及其小文件存储原理介绍
负责为每个store_path构造一个空闲平衡树,相同大小的空闲块保存在链表中,每次上传请求时会到根据上传的文件大小到平衡树中查找获取大于或者接近的空闲块,然后从空闲块中分割出多余的作为新的空闲块,重新加入平衡树。会将多个小文件存放到一个Trunk文件里,Trunk文件默认大小为64M,一个Trunk文件可以存储很多小文件,容纳一个小文件的空间叫slot,slot最小256字节,最大16M (可在storage.conf里设置)超过16M单独存储。也会消耗硬盘空间,每个innode节点的大小,一般是。
2025-02-25 21:55:26
1003
原创 网络编程中用户层与内核态的交互
应用层通过recv和send与内核中的rmem和wmem交互,内核使用 TCB 来管理每个 TCP 连接的状态。recv和send分别从rmem读取和向wmem写入数据,内核通过这些缓冲区管理网络数据的流动,并确保通过流量控制机制保证稳定传输。
2024-09-19 14:39:44
1767
原创 最通俗易懂的sockfd用法解释
是套接字(socket)类型,是文件描述符 是服务器创建的一个套接字描述符,它通过 函数绑定到一个特定的 IP 地址和端口号上。端口的概念:端口是一个标识特定应用程序或服务的数字。服务器程序绑定到一个端口上,以便客户端知道如何连接它。当服务器通过 调用 绑定端口时,这个端口就是服务器的端口,它用于监听客户端的连接请求。客户端知道服务器的 IP 地址和端口号后,就可以向该端口发起连接。所以, 绑定的是服务器的端口号,是服务器通过该端口接收客户端请求的入口。当服务器使用 函数监听连接请求后,客户端会通过
2024-09-10 19:19:55
1911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人