C/C++
文章平均质量分 78
以iOS开发为基础,运用C和C++的技巧处理更多的iOS事务,提高iOS业务开发的效率和性能,包括iOS的底层实现、原理分析,以及数据结构、算法等。
╰つ栺尖篴夢ゞ
本人毕业于计算机技术专业,从事iOS高级开发,专注于iOS/MacOS内核/汇编/源码/架构/算法等相关技术的开发学习,同时热爱人工智能、OpenGL/ES、云原生等技术,CSDN博客专家与原力计划作者,华为云云享专家与特约博主,阿里云专家博主,荣获CSDN iOS领域优质创作者、2022年度博客之星移动领域TOP 3、2022年度博客之星TOP 16、AI创想秀邂逅“华为云ModelArts”征文大赛一等奖、CSDN第一届猿创征文优质博文奖,以及多项优秀TOP博文、CSDN开源挑战赛优秀奖等。
展开
-
C语言之深入解析如何理解指针和结构体指针、指针函数、函数指针
一直觉得C语言较其它语言最伟大的地方就是C语言中的指针,有些人认为指针很简单,而有些人认为指针很难,当然这里的对简单和难并不是等价于对指针的理解程度。该文对C语言中的指针进行全面的总结,从底层的内存分析,彻底让读者明白指针的本质。原创 2023-02-02 15:03:32 · 1537 阅读 · 4 评论 -
C++之深入解析虚函数和虚继承的内存模型及其原理
C++ 中虚函数、虚继承的内存模型是一个经典问题,其实现依赖于编译器,但其主要原理大体相同。本文以问题导向的方式,详细介绍 g++ 中虚函数和虚继承的内存模型及其原理。原创 2023-04-17 11:49:08 · 1128 阅读 · 0 评论 -
C++之深入解析STL deque容器的底层实现原理
STL 中每个容器的特性,和它底层的实现机制密切相关,deque 自然也不例外。deque 容器擅长在序列的头部和尾部添加或删除元素。本文将深入分析 deque 容器的底层实现机制,探究其拥有此特点的原因。想搞清楚 deque 容器的实现机制,需要先了解 deque 容器的存储结构以及 deque 容器迭代器的实现原理。原创 2023-04-17 14:48:20 · 733 阅读 · 0 评论 -
C++之深入解析虚函数表的实现及其内存布局
C++ 中的虚函数的作用主要是实现了多态的机制,关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数:Derive d;b1 -> f();这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI 技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。原创 2023-04-17 15:33:04 · 1230 阅读 · 0 评论 -
C++之深入解析析构函数
无论何时一个对象被销毁,就会自动调用其析构函数:变量在离开其作用域时被销毁;当一个对象被销毁时,其成员被销毁;容器(无论是标准库容器还是数组)被销毁时,其元素被销毁;对于动态分配的对象,当对指向它的指针应用delete运算符时被销毁;对于临时对象,当创建它的完整表达式结束时被销毁。原创 2023-04-17 15:58:59 · 1073 阅读 · 0 评论 -
C++之深入解析STL unordered_map的底层实现原理
在了解哈希表存储结构的基础上,本文将具体分析 C++ STL 无序容器(哈希容器)底层的实现原理。C++ STL 标准库中,不仅是 unordered_map 容器,所有无序容器的底层实现都采用的是哈希表存储结构,更准确地说,是用“链地址法”(又称“开链法”)解决数据存储位置发生冲突的哈希表。原创 2023-04-18 19:00:32 · 1869 阅读 · 2 评论 -
C++之深入解析C++20协程的原理和应用
随着 C++20 正式发布,开发者终于迎来了协程特性,它可以让代码非常清爽,简单易懂,同时保持了异步的高性能。但不少开发者直言,C++的协程标准是给库的开发者使用的,非常复杂,对普通开发者一点都不友好。本文立足于 C++20 使用的无栈协程标准,以具体示例分享协程的具体应用实践与经验。原创 2023-04-19 14:58:26 · 2970 阅读 · 0 评论 -
C++之深入解析std::thread的使用
每一个 C++11 程序都包含一个主线程即 main() 函数,在 C++11 中可以通过创建 std::thread 对象来创建新的线程,每个 std::thread 对象都可以与一个线程相关联。原创 2023-04-19 17:04:52 · 2333 阅读 · 0 评论 -
C++之深入解析野指针和悬空指针
野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少,对野指针进行操作很容易造成程序错误。原创 2023-04-19 17:35:07 · 1949 阅读 · 3 评论 -
C++之深入解析如何实现一个线程池
当进行并行的任务作业操作时,线程的建立与销毁的开销是,阻碍性能进步的关键,因此线程池,由此产生。使用多个线程,无限制循环等待队列,进行计算和操作。帮助快速降低和减少性能损耗。线程池管理器:初始化和创建线程,启动和停止线程,调配任务;管理线程池工作线程:线程池中等待并执行分配的任务任务接口:添加任务的接口,以提供工作线程调度任务的执行。任务队列:用于存放没有处理的任务,提供一种缓冲机制,同时具有调度功能,高优先级的任务放在队列前面原创 2023-05-01 02:00:00 · 2187 阅读 · 0 评论 -
C++之深入解析如何通过extern “C”关键字支持C语言
C++ 语言的创建初衷是 “a better C”,但是这并不意味着 C++ 中类似 C 语言的全局变量和函数所采用的编译和连接方式与 C 语言完全相同。作为一种欲与 C 兼容的语言, C++ 保留了一部分过程式语言的特点(被称为"不彻底地面向对象"),因而它可以定义不属于任何类的全局变量和函数。但是, C++ 毕竟是一种面向对象的程序设计语言,为了支持函数的重载, C++ 对全局函数的处理方式与 C 有明显的不同,那么 C++ 中如何通过 extern “C” 关键字支持 C 语言呢?原创 2023-05-04 14:54:59 · 1126 阅读 · 6 评论 -
C++之深入解析RVO返回值优化(Return Value Optimization)
为了从一个函数得到运行结果,常规的途径有两个:通过返回值和通过传入函数的引用或指针(当然还可以通过全局变量或成员变量,当然这算不上最优的方案)。通过传给函数一个引用或指针来承载返回值在很多情况下是无可厚非的,毕竟有时函数需要将多个值返回给用户。除了这种情况之外,我觉得应当尽量做到参数作为函数输入,返回值作为函数输出。然而,总能看到一些“突破常规”的做法。原创 2023-05-08 10:17:44 · 927 阅读 · 0 评论 -
C语言经典面试题之深入解析 字符串拷贝的 sprintf、strcpy和memcpy使用与区别
sprintf 指的是字符串格式化命令,是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串,直到出现字符串结束符 '\0' 为止。原创 2021-09-19 18:18:05 · 6397 阅读 · 2 评论 -
C++经典面试题之深入解析const修饰指针的作用
我们知道,当一个变量用 const 修饰后就不允许再改变它的值,那么如果在定义指针变量的时候用 const 修饰会怎样呢?当用 const 进行修饰时,根据 const 位置的不同有三种作用,原则是:谁被修饰谁的内容就不可变,其它的都可变。原创 2023-02-03 14:02:13 · 1226 阅读 · 4 评论 -
C++经典面试题之深入解析list、vector和deque的联系和区别
List 封装了链表,Vector 封装了数组,list 和 vector 得最主要的区别在于 vector 使用连续内存存储的,它支持 [] 运算符,而 list 是以链表形式实现的,不支持 []。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List 对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以。原创 2023-04-17 14:32:10 · 637 阅读 · 0 评论 -
C++经典面试题之深入解析带虚函数空类的内存大小
本文详细地分析了空类、虚函数、静态数据成员、普通成员函数、普通继承、虚拟继承等内存中分配中的大小,并分析其内存分配的原因和原理。原创 2023-04-17 16:50:36 · 621 阅读 · 0 评论 -
C++经典面试题之深入解析智能指针unique_ptr的实现原理与自定义实现
unique_ptr 独享它指向的对象,也就是说,同时只有一个 unique_ptr 指向同一个对象,当这个 unique_ptr 被销毁时,指向的对象也随即被销毁。这也是它和 shared_pt r不一样的地方,它不需要做引用计数,也不可以被第二个人引用,只有它自己。unique_ptr 作为一个类的成员变量,这个变量只在本类使用,不会被赋值给其他类,也不会作为参数传递给某个函数;在一个函数作为局部变量,使用完就不用再管,函数结束,自动释放托管资源。原创 2023-04-18 10:32:21 · 1504 阅读 · 0 评论 -
C++经典面试题之深入解析内存对齐
众所周知,为了保证每个对象拥有彼此独立的内存地址,C++空类的内存大小为1字节。而非空类的大小与类中非静态成员变量和虚函数表的多少有关。其中,类中非静态成员变量的大小则与编译器的位数以及内存对齐的设置有关。原创 2023-04-19 15:20:41 · 904 阅读 · 0 评论