- 博客(118)
- 收藏
- 关注
原创 std::enable_shared_from_this 模板类的作用是什么?
我们以Connection类的shared智能指针为例说明,是一个标准库模板类,它的作用是让一个类的对象能够安全地生成指向自身的,即使该对象最初是通过普通指针或其他方式创建的。
2025-04-14 23:15:35
435
原创 x86 保护模式中的GDT表是什么?
GDT(全局描述符表,Global Descriptor Table)是 x86 保护模式下用于描述不同类型内存段的一个重要数据结构。在保护模式下,GDT 用于管理和保护系统内存,它通过提供一组段描述符来定义内存的访问权限、大小、类型等属性。
2025-04-14 23:12:50
343
原创 C++编译期反射的案例和场景
序列化是将对象转换为可存储或传输的格式(如JSON、XML等),反序列化则是从这种格式恢复对象。传统上需要手写大量代码,而通过编译期反射,可以自动生成这些代码。处理枚举类型时,经常需要将枚举值映射为字符串(如日志打印)或从字符串恢复枚举值(如配置解析)。通过编译期反射,可以轻松实现这些功能。编译期反射可以帮助在编译阶段验证类型是否符合要求,避免运行时错误。通过编译期反射,可以自动生成这些代码,减少重复劳动。在元编程中,利用编译期反射可以生成复杂的模板化代码,适用于需要高性能和强抽象的场景。
2025-04-13 16:11:47
520
原创 Visual Studio Code 在.S汇编文件中添加调试断点及功能简介
Visual Studio Code(VS Code)提供了强大的调试功能,下面简单讲讲 VS Code 断点功能。
2025-04-13 16:08:23
1104
原创 UNIX域套接字(Unix Domain Sockets, UDS) 的两种接口
(File Descriptor Passing),这是其独特优势。虽然 UNIX 域套接字在本地通信,但。UNIX 域套接字的流式套接字支持。
2025-04-11 09:38:16
663
原创 Linux 递归查找并删除目录下的文件
在 Linux 中,可以使用 find 命令递归查找并删除目录下的文件。如果需要删除目录本身,可以使用 -type d 或结合 rm -r。
2025-04-07 23:35:22
336
原创 关于计算机网络的一些疑问
队头阻塞(Head-of-Line Blocking, HOL Blocking)是指一个连接中的请求因为前面的请求没有完成而被阻塞的情况。HTTP/1.x 中,主要有两种形式的队头阻塞:HTTP 层的队头阻塞:在 HTTP/1.1 中,虽然引入了“持久连接”(Persistent Connection)和“管道化”(Pipelining),但同一条 TCP 连接只能按顺序处理请求。如果一个请求因为某些原因(如服务器响应延迟)没有完成,后续请求就必须等待,无法越过前面的请求。这就导致了“队头阻塞”。
2025-04-06 09:37:19
1059
原创 USB传输结构结构与类型简介
Transfer(传输)├─ Transaction(事务)│ ├─ Packet(数据包)│ └─ Packet(数据包)└─ Transaction(事务)从大到小:传输 → 事务 → 数据包,层层细化。
2025-04-06 09:30:44
855
原创 USB传输(Transaction)过程简介
快递单(Token):说明要寄什么、给谁。包裹(Data Packet):实际物品。签收单(Handshake):确认是否收到。
2025-04-04 14:55:30
920
原创 深度探索C++对象模型 - 位逐次拷贝语义
位逐次拷贝语义”(bitwise copy semantics)指的是,对象的复制可以通过直接复制其在内存中的原始字节来实现。这种复制方式简单且高效,适用于结构简单的类,例如那些不包含指针、需要特殊拷贝处理的资源或复杂继承结构的类。对于这类简单的类,复制其内存布局就相当于创建了一个完全相同的副本。当一个类包含一个成员对象,而该成员对象所属的类定义了拷贝构造函数时(无论是显式声明还是由编译器合成),该类就不能简单地依赖位逐次拷贝。
2025-04-04 14:54:32
462
原创 C 预处理器、编译器和链接器的理解与说明
阶段选项作用示例预处理器-E仅预处理,输出结果-I指定头文件路径-D定义宏编译器-c生成目标文件(.o-S生成汇编代码(.s-O2优化级别 2-g生成调试符号链接器-o指定可执行文件名-L指定库搜索路径-l指定链接的库。
2025-04-03 11:58:15
1156
原创 解决双系统(ubuntu与windows)中的时间同步问题
我在同一台机器上同时运行Ubuntu和其他操作系统(如Windows),遇到由于不同的RTC处理方式导致的时间不同步问题使用下面的指令查看系统时间状态,Local time实际上是RTC timeWindows默认假设RTC是以本地时间为基准设置的,而大多数Linux发行版(包括Ubuntu)则通常配置成认为RTC保存的是UTC协调世界时15。这种差异会导致每次切换操作系统后看到的时间不一致。
2025-03-30 13:47:29
603
原创 开源项目里的 autogen.sh 是做什么?
脚本用于在特定系统上配置软件的构建过程。它会检查系统特性、已安装的库和头文件,并根据这些信息生成适合的。是一个在基于 Autotools 构建系统的开源项目中常见的脚本。是 Autotools 的一个组件,它会根据项目根目录下的。脚本中添加额外的自定义步骤,以完成特定的初始化或准备工作。是 Autotools 的另一个组件,它会根据项目中的。它会检查系统中是否安装了构建项目所需的工具,例如。如果缺少必要的工具,脚本可能会报错并提示安装。,或者在项目的构建相关文件(例如。因此,通常会在克隆源代码后。
2025-03-29 18:19:59
518
原创 libimobiledevice项目中各个库的作用
这是一个基于 FUSE (Filesystem in Userspace) 的工具,允许您像挂载普通文件系统一样挂载 iOS 设备的文件系统。这是一个后台守护进程(daemon),负责管理通过 USB 连接的 iOS 设备的 socket 连接。这是一个用于与处于恢复模式(Recovery Mode)或设备固件升级模式(DFU Mode)的 iOS 设备进行通信的库。这是一个命令行工具,也是一个库,用于在已越狱和未越狱的 iOS 设备上安装、卸载和管理应用程序(.ipa 文件)。守护进程的客户端库。
2025-03-29 17:14:28
440
原创 Boost无锁队列简介
无锁队列(Lock-Free Queue)是一种在多线程环境中非常高效的队列实现,其最大优势在于避免了传统的锁机制(如互斥锁mutex)带来的性能开销。它们通过特定的算法和原子操作保证多线程访问时,不需要锁定资源,因此提高了并发执行效率。以Boost库中的无锁队列和分析其中的一些关键点,理解无锁队列的实现原理。
2025-03-25 11:12:37
371
原创 SQLite优化实践
通过将多个插入操作包装在一个事务中,可以显著减少每次写入数据库时的磁盘I/O操作。减少磁盘I/O、提高插入速度,并在牺牲一些内存和CPU使用的情况下优化数据库性能。
2025-03-25 11:08:57
811
原创 C++中的SSO(小字符串优化)是什么
SSO(Small String Optimization)是一种优化技术,旨在提高小字符串的性能。在传统的实现中,字符串通常会在堆上分配内存,这意味着每次创建或操作字符串时,都会涉及到动态内存分配,这对小字符串来说是低效的。为了解决这个问题,SSO 将短字符串直接存储在对象本身的内存中,而不需要额外的堆内存分配。这样可以大幅降低小字符串操作的开销,避免频繁的内存分配和指针访问。
2025-03-24 22:23:38
429
原创 notify_one() 会阻塞吗?
时,如果有线程在等待条件变量,它会被唤醒并开始检查条件。如果没有线程在等待,调用。唤醒线程后,这个线程并不会立刻继续执行,它必须先重新获取锁并检查条件是否满足。会使一个处于等待状态的线程被唤醒并继续执行,但它本身并不会阻塞。它是用于唤醒一个等待中的线程,通常是通过条件变量(
2025-03-24 22:19:18
240
原创 SQLite 查询数据库属性
在 SQLite 命令行工具中,没有直接查看数据库文件大小的指令,但你可以通过操作系统的命令来查看。例如,在 Linux 或者 macOS 系统中,你可以使用。表存储着数据库的元数据,其中包含了所有表、视图、索引等的定义信息。若要查看某个表的结构,也就是表的列名、数据类型等信息,可以使用。在 Windows 系统中,你可以使用。若要查看数据库里的所有表名,可以借助。替换成你实际要查看的表名。
2025-03-21 09:59:27
556
原创 Windows 格式化磁盘
7、输入 “format fs=ntfs quick” 命令,将指定分区格式化为 NTFS 文件系统。6、输入 “select partition #” 命令(# 为要格式化的分区号),精准选定要进行格式化操作的分区。点击 “开始” 菜单,输入 “cmd”,右键单击并选择 “以管理员身份运行”。3、输入 “list disk” 命令,查看当前计算机中所有的磁盘,找到装有 Ubuntu 系统的磁盘编号。4、输入 “select disk #” 命令(# 为要格式化的分区所在的硬盘号),选中目标磁盘。
2025-03-21 09:39:41
407
原创 Android Shell上执行可执行文件报错:Permission denied
文件系统挂载为SELinux安全策略限制Android中以下目录通常允许执行文件:
2025-03-19 21:54:18
437
原创 Mac下查看dylib库的版本信息
在macOS系统里,otool是一个实用的命令行工具,可用于查看 Mach-O 文件(如可执行文件、动态链接库等)的相关信息。若要查看动态链接库(.dylib)的版本,可借助otool -L命令。
2025-03-18 14:57:12
525
原创 Win10 访问 Ubuntu 18 硬盘
Samba 是在 Linux 和 Unix 系统上实现 SMB/CIFS 协议的一个免费软件,可让 Windows 系统方便地访问 Linux 共享资源。在 Ubuntu 上搭建 FTP 服务器,让 Windows 10 通过 FTP 客户端访问。SSHFS 允许你通过 SSH 协议挂载远程文件系统。请替换为你实际的用户主目录。
2025-03-08 22:14:30
1189
原创 Ubuntu18使用Samba共享服务
Samba 是在 Linux 和 Unix 系统上实现 SMB/CIFS 协议的一个免费软件,可让 Windows 系统方便地访问 Linux 共享资源。
2025-02-22 23:29:17
537
原创 Linux 多进程生产者消费者模型实现
生产者消费者模型是并发编程中的经典案例,本文通过一个具体的C++示例,演示如何在Linux环境下使用System V IPC机制实现跨进程的生产者消费者模型。(此处插入用户提供的完整生产者/消费者代码)
2025-02-18 23:24:38
1002
原创 Linux 信号量
信号量作为经典的进程同步工具,在系统级编程中仍具有重要地位。理解其底层机制并结合现代编程范式,能够帮助开发者构建更健壮的并发系统。在实际应用中,需要根据具体场景选择最合适的同步策略,平衡性能与安全性。在多进程/多线程编程中,当多个执行单元需要访问共享资源时,必须引入同步机制来保证数据一致性。信号量(Semaphore)正是解决这一问题的经典方案。
2025-02-17 23:58:44
930
原创 Git 修改或删除某次提交信息
如果要修改或删除的提交已经推送到远程仓库,在修改本地提交信息后,还需要强制推送到远程仓库。强制推送可能会影响其他团队成员的工作,因此在多人协作的项目中,建议先与团队成员沟通协调。步骤与修改历史提交信息类似,只是在输入新的提交信息时将内容清空,然后保存并关闭编辑器。如果你要修改或删除的提交是最新的一次提交(即 HEAD 指向的提交),可以使用。的缩写,表示强制推送,会覆盖远程仓库上的提交历史,请谨慎使用。如果你想要修改或删除的不是最新的提交,而是历史提交,可以使用。执行该命令后,提交信息会被替换为空字符串。
2025-02-15 17:09:18
685
原创 C# 调用 C++ 动态库接口
在 C# 中调用 C++ 动态库接口,通常需要通过 P/Invoke (Platform Invocation Services) 来与 C++ 代码交互。
2025-02-15 15:33:14
336
原创 CMake 判断 Mac编译环境是Intel的还是Arm的?
在 CMake 中判断 Mac 是 Intel 架构还是 ARM 架构,可以通过检测变量。这个变量返回的是系统的处理器架构信息,可以根据它的值来区分 Intel 和 ARM。"x86_64""arm64"可以在文件中使用这个信息来执行不同的逻辑。
2025-02-15 15:29:03
383
iOS逆向-基础内容-iOS体系结构-iOS安全体系-iOS Media Layer-iOS Core OS Layer-iOS 应用程序结构-iOS 进程间通信
2025-01-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人