- 博客(26)
- 收藏
- 关注
原创 C++ 常见陷阱与性能优化指南
C++开发常见陷阱与性能优化要点 摘要:本文总结了C++开发中的常见陷阱与性能优化关键点,涵盖内存管理、对象生命周期、语言特性、STL使用等方面。主要内容包括:1) 内存泄漏、悬空指针等内存管理问题;2) 对象切片、局部对象引用等生命周期问题;3) 隐式类型转换、运算符优先级等语言特性误用;4) STL迭代器失效、算法选择等使用陷阱;5) 现代C++中移动语义、auto推导等新特性注意事项;6) 多线程中的数据竞争和虚假共享问题;7) 编译链接时的ODR违反和静态初始化顺序问题。
2025-12-28 14:49:07
488
原创 深入浅出:libstdc++.so、libc.so与Linux系统调用的三重奏
摘要:本文解析了C++程序中std::cout语句的执行过程,揭示了从高级语言到底层系统调用的三层转换机制。首先,Linux系统调用API提供300多个原始接口;其次,glibc库(libc.so)对系统调用进行封装和安全处理;最后,libstdc++.so在glibc基础上提供面向对象的C++标准库实现。通过跟踪文件写入的完整调用链,展示了三者如何协同工作:C++流操作→glibc函数→系统调用。文章还对比了三者在抽象级别、错误处理等方面的本质区别,呈现了现代编程语言与操作系统交互的完整架构。
2025-12-13 18:48:45
755
原创 本地部署DeepSeek大模型原来这么简单!
本文介绍了如何在本地部署和使用DeepSeek R1大模型。首先需要下载安装ollama工具,验证安装成功后选择适合电脑配置的DeepSeek R1模型版本进行安装。为提升使用体验,可安装开源AI客户端ChatBox,配置环境变量后即可通过可视化界面调用本地部署的模型。整个过程包括工具安装、模型选择、环境配置等步骤,帮助用户快速上手AI应用。
2025-12-08 20:57:18
397
原创 Linux共享库版本管理:深入理解soname机制
本文介绍了Linux共享库版本管理中的soname机制。soname是嵌入在共享库中的ABI兼容性标识,通过三种命名方式(真实名称、soname、链接时名称)实现版本控制。文章演示了创建带soname的动态库步骤:编译时指定soname,创建符号链接,验证依赖关系。这种机制确保ABI兼容性,支持多版本共存,提供灵活的更新策略(bug修复不改变soname,重大更新创建新soname),并建立明确的依赖关系,防止因库更新导致的程序崩溃。
2025-10-22 12:58:32
503
原创 深入探究c++中符号冲突导致的未预期行为
摘要:本文分析了C/C++开发中动态库符号冲突问题及其解决方案。当多个动态库定义了相同符号时,默认情况下动态链接器会根据链接顺序选择第一个遇到的符号,导致程序可能执行非预期代码。通过示例代码演示了该问题现象,验证了符号解析顺序对程序行为的影响。提出了四种解决方案:1)规范命名;2)使用__attribute__((visibility("hidden")))隐藏非公开符号;3)编译时添加-fvisibility=hidden参数;4)使用-Wl,-Bsymbolic选项强制优先使用本模块
2025-07-20 15:36:39
1176
原创 c++编译器(g++)版本差异导致标准库函数崩溃
在这款c++应用程序中使用标准库输出函数std::cout, 一编译运行后直接signal fault, gdb bt查看堆栈奔溃在这个函数std::cout 里边,并且这个奔溃显示调用到第三方库的so中的std::cout中,并不是依赖的应用程序本地的libstdc++库。一款c++应用程序(g++ 9.3.0)接入一个第三方SDK(g++ 4.9.3).so,并且该SDK内部静态依赖libstdc++(对应链接选项命令-static-libstdc++)假设第三方库为libthird.so。
2023-10-17 23:04:27
626
原创 ios/mac之Object-c学习笔记
Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "
2022-04-17 11:18:01
625
原创 TCP报文、三次握手、四次挥手
1、TCP头格式(1) Source Port(源端口号):数据发起者的端口号,16bit。(2) Destination Port(目的端口号):数据接收者的端口号,16bit。(3) Sequence Number(顺序号码,Seq):用于在数据通信中解决网络包乱序(reordering)问题,以保证应用层接收到的数据不会因为网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32bit。(4) Acknowledgment Number(确认号码,ack):是数据...
2022-04-17 10:44:31
909
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2