- 博客(174)
- 收藏
- 关注
原创 【C/C++】内存相关
起源:ptmalloc起源于Doug Lea的malloc实现,并由Wolfram Gloger进行改进,以支持多线程。目标:ptmalloc的主要目标是为多线程应用程序提供高效的内存分配和释放。名称含义:“pt”代表“pthreads”,指的是POSIX线程库,表明其支持多线程的特性。ptmalloc作为glibc中的默认内存分配器,在Linux系统中扮演着重要角色。它通过一系列机制来提高内存分配和释放的效率,并支持多线程应用程序。
2024-07-11 23:10:21
759
原创 【网络协议】PIM
PIM协议不依赖于特定的单播路由协议,如RIP(路由信息协议)或OSPF(开放最短路径优先),而是可以直接利用这些单播路由协议建立的路由表进行组播路由的计算和转发。这使得PIM协议能够在不同的网络环境中灵活应用,并减少了对特定路由协议的依赖。PIM协议作为一种协议无关组播协议,在组播路由领域具有重要地位。其灵活性和可扩展性使得PIM协议能够适应不同规模和复杂度的网络环境需求。同时,PIM协议的低开销特性也降低了网络运营成本。
2024-07-08 22:43:38
554
原创 【网络协议】ISIS
IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)协议是一种用于在自治系统(AS)内部进行路由选择的链路状态路由协议。它最初是为OSI(开放系统互连)网络设计的,但后来被扩展以支持IPv4和IPv6网络。
2024-07-08 22:42:03
530
原创 【网络协议】OSPF
OSPF(Open Shortest Path First)协议是一种广泛使用的动态路由协议,它属于链路状态路由协议,在单一自治系统(AS)内部工作。
2024-07-08 22:40:31
313
原创 【计算机】同步/异步
在计算机科学和编程中,“同步”(Synchronization)是一种机制,用于协调不同进程或线程之间的操作,以避免竞态条件(race conditions)、死锁(deadlocks)和其他并发问题。同步确保了在多线程或多进程环境中,对共享资源的访问是有序的、互斥的,从而保证了数据的一致性和完整性。然而,过度使用同步机制也可能导致性能问题,如增加线程间的等待时间和降低系统的吞吐量。:互斥锁是最基本的同步机制之一,用于保护共享资源,防止多个线程同时访问。:屏障是一种同步机制,用于在多个线程之间设置同步点。
2024-07-07 15:56:10
328
1
原创 C++ 杂七杂八
new -> 失败,bad_alloc异常malloc -> 失败,返回nullptroperator new/delete 可重载, c++运算符malloc/free 不允许重载,标准库函数递增/减前置 -> 引用后置 -> 对象(值)define vs typedef无循环/无条件判断/函数体小全特化 template<>声明
2024-07-01 23:13:23
237
原创 Leetcode 股票买卖
启发思路:最后一天发生了什么?从第0天到第5天结束时的利润 = 从第0天到第4天结束时的利润 + 第5天的利润(第5天的利润:0/-4/4)关键词:天数 / 是否持有股票分解子问题:到第i天结束,持有/未持有股票的最大利润下一子问题:到第i-1天结束时,持有/未持有股票的最大利润状态转移图fill:#333;color:#333;color:#333;fill:none;买入卖出未持有持有定义dfs(i, 0)表示到第i天结束,未持有股票的最大利润。
2024-06-26 13:06:43
482
原创 CMake使用指导
总结来说,控制CMake编译顺序的关键在于正确地声明项目中的依赖关系,并编写清晰的CMakeLists.txt文件。在CMake中控制编译顺序主要依赖于CMake对项目依赖关系的理解和处理。等命令,并结合CMake的自动处理机制,可以确保项目按照正确的顺序进行编译。
2024-06-25 13:39:53
356
原创 软开面试介绍模板
基本信息姓名教育背景(学校、专业、毕业时间)工作经验(如有)技能与专长编程语言(如Java、Python、C++等)的掌握程度框架和库(如Spring Boot、Django、React等)的使用经验版本控制工具(如Git)的熟练使用数据库知识(如MySQL、PostgreSQL、MongoDB等)自动化测试和调试技能操作系统和服务器管理(如Linux、Windows Server)其他相关技术或工具(如Docker、Kubernetes、AWS等)项目经验。
2024-06-25 13:33:17
451
原创 【C++】future/promise
需要从线程中返回异步任务结果情形时,c++11之前:使用指针在线程间共享数据。传递一个指针到新的线程中,该线程在其中设置数据,直到主线程继续等待使用条件变量。当新线程设置数据并通知条件变量时,主线程将唤醒并从指针处获取数据;C++11提供future类模板,future对象提供访问异步操作结果的机制。分类唯一期望(unique futures, std::future)实例只能与一个指定事件相关联;
2024-06-24 13:46:17
162
原创 【C++】属性
这个属性在C++17中被引入,主要是为了增加代码的可读性和安全性。它特别有用于那些返回错误代码或状态信息的函数,因为忽略这些返回值可能会导致潜在的问题。调用没有使用返回值,因此编译器可能会发出警告(取决于编译器的设置和编译器的实现)。是一个属性(attribute)用于建议调用者不应该忽略(discard)函数或方法的返回值。的函数的返回值,代码仍然可以编译和运行。但是,为了代码的可读性和安全性,最好遵循这个建议。(通常是警告级别,而不是错误),如果调用者没有使用或检查该函数的返回值。
2024-06-24 00:09:18
131
原创 【C/C++】常量定义
在某些情况下仍然有用(特别是与旧的C代码库交互时),但在现代C++编程中,应优先使用。都用于定义常量,但它们之间存在显著的差异。来定义常量表达式,以提高代码的安全性、可读性和可维护性。
2024-06-22 22:34:16
331
原创 【趣味测试】
由于计算机的内存是有限的,所以浮点数并不能精确地表示所有的实数。当我们尝试在计算机中存储或计算浮点数时,它们通常会被转换为最接近的二进制表示形式,这可能会导致微小的精度损失。在二进制中,有些十进制小数(如0.1和0.2)不能精确地表示,因此它们会被存储为最接近的二进制浮点数。当这些不精确的浮点数相加时,结果可能会与预期的精确值略有偏差。在大多数编程语言中,0.1 + 0.2 == 0.3 的结果为 false 并不是因为这两个数在数学上不等于0.3,而是因为浮点数的表示和计算存在精度问题。
2024-06-19 21:27:13
257
原创 【C++】编程核心概念——核心特征
在面向对象的设计中,封装、继承和多态通常一起使用,以创建模块化、可重用和可扩展的代码。封装隐藏了实现细节,继承实现了代码重用和层次化分类,而多态则提供了在运行时根据对象类型执行不同方法的灵活性。这些特性共同构成了面向对象编程的基础,使得C++等面向对象语言能够处理复杂的现实世界问题。在C++中,封装、继承和多态是面向对象编程的三大核心概念。这些特性为程序员提供了一种创建和管理复杂系统的方法,同时保持了代码的模块化、可重用性和可扩展性。
2024-06-18 01:00:52
418
原创 【网络协议栈】IGMP
定义:IGMP是多播组成员的一种通信协议,用于在IP主机和相邻的路由器之间创建多播组的组成员。它是IP多播说明的一个完整部分,用于支持临时组地址的分配和组成员的添加删除。作用:IGMP的主要功能是在IP主机和与其直接相邻的组播路由器之间建立并维护组播组成员关系。它允许主机发送加入或离开组播组的消息,同时组播路由器则根据这些消息来更新其组播路由表,从而实现高效的组播数据传输。IGMP作为TCP/IP协议族中的重要组成部分,对于实现高效的组播传输具有重要意义。
2024-06-18 00:26:47
990
原创 【操作系统】线程&进程相关
在C++中,线程的执行顺序是由操作系统调度的,并且通常是不能被程序员直接控制的。也就是说,你不能直接强制线程按照特定的顺序执行。然而,你可以使用某些同步机制来影响线程的执行顺序,或者确保某些操作在特定线程完成之前不会被其他线程执行。请注意,过度依赖特定的线程执行顺序可能会导致代码难以理解和维护。在可能的情况下,最好编写不依赖于特定执行顺序的并发代码。
2024-06-17 22:02:56
282
原创 【C++】内存管理
在C++中有更多的语义和复杂性,因为它涉及到调用对象的析构函数。函数最终都会调用相同的底层系统调用来分配和释放内存(如。尽管它们的目的都是为了释放动态分配的内存,但。提供了额外的类型安全性和资源管理特性,这是C的。在大多数现代操作系统和编译器上,C++的。有相似的内存释放操作,但它并不是直接调用。操作符的底层实现并不直接调用C语言中的。,而是有自己的实现和语义。
2024-06-17 00:36:58
276
原创 【C++】类相关知识
在某些情况下,如果你定义了移动构造函数或移动赋值运算符,并且没有显式地定义默认构造函数,编译器可能认为默认构造函数是不必要的,因此可能不会为它生成。中含有无法默认初始化的成员变量(比如引用类型、没有默认构造函数的类类型等),并且你没有提供自定义的默认构造函数,那么编译器会尝试为你生成一个默认构造函数,但会因为无法初始化这些成员而失败,并导致默认构造函数被隐式删除。来显式地要求编译器生成默认构造函数,但条件不满足(比如因为上述的无法默认初始化的成员变量),那么编译器会报错而不是生成默认构造函数。
2024-06-16 22:51:44
445
原创 【OS】相关知识点收集
页面置换算法主要应用于在存储体系当中,当进程所需内存大于所分配的内存时。例如,一个进程被分成了100页,但系统分配的内存块只有5个。此时,如果内存块被占满,而所需的进程页又不在内存块体系中,则需要先丢出一个不用的页,再调入所需的页,这个过程被称为页面置换。页面置换算法是内存管理中的重要组成部分,对于提高系统性能和减少缺页中断率具有重要作用。在选择页面置换算法时,需要根据实际的应用场景和需求进行权衡和选择。
2024-06-15 17:42:04
423
原创 【C++】开源项目收集
C++ 是一种强大的、静态类型的通用编程语言,它的开源生态系统非常丰富,拥有众多高质量的项目。: 这是一个庞大的库集合,提供了大量的实用工具和组件,如文件系统、网络编程、智能指针等,对C++标准库进行补充。C++的热门框架众多,这些框架在各自的应用领域中都有着广泛的使用和认可。以上这些项目都是C++的热门开源项目,涵盖了不同的领域和难度,可以根据自己的兴趣和需求选择学习。这些框架都在各自的领域内有着广泛的应用和认可,选择哪个框架取决于你的具体需求和项目类型。
2024-06-14 00:55:03
1241
3
原创 【写时复制】内存不一致
写时复制虽然可以优化内存使用并提高性能,但在并发环境下也可能导致内存不一致的问题。为了解决这些问题,需要采取适当的同步机制、优化写时复制的实现以及使用容错和恢复机制来确保数据的一致性和可靠性。在设计和实现基于写时复制的系统时,需要仔细考虑这些潜在的问题,并采取相应的措施来避免它们。
2024-06-12 22:15:37
268
原创 malloc brk mmap
分配的内存时(例如,通过写入或读取该内存),可能会触发其他类型的系统调用,如页面错误(page fault)处理。当进程尝试访问尚未映射到物理内存的虚拟内存页面时,操作系统会触发一个页面错误,并可能使用系统调用来将页面加载到物理内存中。的具体实现可能因库、操作系统和平台而异,但通常它会与底层操作系统提供的内存管理功能进行交互。不同的实现和操作系统可能会有不同的策略和阈值来决定何时使用。在内存管理中各自扮演着不同的角色,它们之间的关系主要体现在。会使用系统调用来从操作系统请求更多的内存。
2024-06-12 02:37:09
744
原创 【无标题】
C++ & class & polymorphic1 作用2 分类2.1 静态多态编译期确定实现方式:函数重载(函数名相同,函数列表(返回值)不同)[注意:不能仅返回值不同]2.2 动态多态运行期确定实现方式:虚函数重写关键:虚函数表
2024-06-09 01:06:35
87
原创 Class
原因:每一个Derived Class Destructor都会被编译器加以扩张,以静态调用的方式调用其“每一个Virtual Base Class”和“上一层Base Class”的destructor。封装是编译期的概念,是针对类型而非对象的,在类的成员函数中可以访问同类型实例对象的私有成员变量.。注:C++保证:继承体系中每一个class object的destructor都会被调用。场景1:类的拷贝构造函数可以访问另一个类对象的私有成员。要点1:基类析构函数声明为虚函数,但不能为pure。
2023-04-21 00:09:55
99
原创 01_计算机如何理解数据
计算机不理解人类的符号、逻辑、数据和函数,对于计算机来说,需要使用数字电路来存储、提取、处理(计算)和展现。当前主流计算机存储数据的方式是数字电路的通和断(假设高电压为1,低电压为0),这种主流方式即二进制,计算机发展前期也有三进制等方式,只是在后期发展中被淘汰。为了实现0/1到字符的演进,人们发明了ASCII码用来定义常见的字母和标点符号。显卡通过像素点(0/1,或者其他形式)来完成显示目的。
2023-04-08 00:46:52
132
空空如也
C++开发过程中可能遇到的问题
2024-06-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人