自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fpcc的专栏

于细微处见精神,从宏观里学态度。行之苟有恒,久久自芬芳。

  • 博客(721)
  • 资源 (21)
  • 问答 (1)
  • 收藏
  • 关注

原创 c++性能测试工具——Callgrind的使用

本文介绍了Callgrind性能分析工具的使用方法。Callgrind是Valgrind工具集的一部分,主要用于分析函数调用关系和CPU缓存性能,支持调用图分析、缓存模拟和多线程分析。文章详细说明了安装步骤(通过apt安装valgrind和kcachegrind)、基本使用方法(包含命令行参数说明),并通过一个C语言示例程序演示了完整的分析流程:从编译带调试信息的程序、运行Callgrind分析,到生成文本报告和图形化结果。最后指出Callgrind会使程序运行速度显著下降(约几十倍),需要开发者权衡使用。

2025-05-24 09:28:12 130

原创 c++性能测试工具——Oprofile的使用

本文介绍了Linux系统性能测试工具Oprofile及其使用方法。Oprofile是一个低开销、跨平台的性能分析工具,新版本使用operf替代opcontrol,支持用户态和内核态数据采集。文章详细说明了安装方法(apt-get安装)和operf的使用命令格式,包括分析指定进程、系统范围分析等选项,并给出具体示例演示如何采集进程性能数据及生成报告。最后指出Oprofile虽功能强大且跨平台支持良好,但在不同硬件平台上使用时需注意可能的依赖差异。全文提供了从安装到实际应用的完整指南。

2025-05-24 09:17:15 62

原创 C++性能测试工具——sysprof的使用

sysprof是一款简单易用的系统性能测试工具,具有图形化界面,支持多种硬件平台和Linux环境。其主要功能包括监控和分析系统范围内的CPU、内存和IO资源,提供按时间段筛选CPU使用情况、查看函数调用栈、保存分析结果等多维度数据监控。sysprof的安装简便,使用命令“sudo apt install sysprof -y”即可完成安装。使用过程中,用户可通过图形界面启动程序、记录性能数据并进行分析,支持多线程和GPU分析。sysprof的图形界面使其操作直观,适合大多数开发者和普通用户使用,无需深入掌握

2025-05-23 21:45:13 368

原创 设计心得——封装

封装是面向对象编程的三大特性之一,它将数据和操作数据的方法整合在一起,形成一个独立的单元(如类或结构体),并对外隐藏内部实现细节,只暴露必要的接口。封装的意义在于提高代码的安全性、可靠性和可维护性,同时为继承和多态提供支持。通过使用不同的修饰符(如public、private、protected)和归类处理,开发者可以实现有效的封装。封装的应用实例广泛,如银行账户类中的余额管理。掌握封装是编程基础中的关键,只有打好基础,才能进一步提升编程水平。

2025-05-18 09:43:36 493 8

原创 C++性能测试工具——AMD CodeAnalyst及其新工具的使用

AMD提供了多种性能测试工具,包括CodeAnalyst、uProf和CodeXL,其中uProf和CodeXL是较新的替代工具,支持最新的硬件架构和操作系统。uProf支持CPU/GPU性能分析和硬件事件监控,而CodeXL提供代码调试和性能分析功能,但已停止维护。安装这些工具需要从AMD官网下载软件包,并在Linux系统中安装相关依赖库。使用这些工具时,需编译带有调试信息的程序,通过命令行启动工具并设置参数进行性能分析。选择合适的工具对于解决实际问题至关重要。

2025-05-17 15:12:21 297

原创 C++性能测试工具——Vtune的使用

本文详细介绍了Intel VTune Profiler的安装、配置、功能及使用示例。VTune是Intel oneAPI工具包中的性能分析工具,支持Linux平台。安装方法包括在线和离线两种,配置涉及环境变量和用户权限设置。VTune提供GUI、命令行和远程应用三种使用方式,能够进行热点分析、生成报告等。通过一个矩阵测试程序的例程,展示了如何收集和分析性能数据。文章还提供了解决常见错误的命令,并强调了熟练使用性能测试工具对程序优化的重要性。

2025-05-17 09:28:53 482

原创 C++性能测试工具——Vtune等的介绍

本文介绍了多种C++性能测试和分析工具,包括Intel Vtune、AMD CodeAnalyst、Valgrind的Callgrind、Oprofile和Sysprof。这些工具各有特点,如Intel Vtune和AMD CodeAnalyst针对特定硬件平台提供架构级分析,而Callgrind和Oprofile则分别提供调用图分析和代码层次的性能监测。Sysprof则专注于CPU、内存和I/O资源的使用情况分析。文章还提到这些工具大多支持多线程和远程分析,但Callgrind和Sysprof不支持远程使

2025-05-16 21:30:12 381

原创 跟我学c++高级篇——模板元编程之十三处理逻辑

元编程中的逻辑处理主要包括条件判断和循环处理。条件判断可通过传统方法(如三目运算符、模板特化、SFINAE技术)和C++新标准方法(如std::conditional、if constexpr、Concepts)实现。循环处理则可通过递归模拟、折叠表达式和模板技巧实现,例如递归模拟斐波那契数列的计算。掌握这些基本逻辑处理是理解和应用元编程的关键。

2025-05-11 10:04:43 501 5

原创 跟我学C++中级篇——STL中的删除对比

本文对比分析了STL中的两种删除方法:std::remove和erase。std::remove并未真正删除元素,而是将其移动到容器尾部,适用于快速删除;而erase则直接删除元素,适用于容器元素的彻底移除。两者在所属库、处理结果和适应性上存在差异,std::remove不适用于关联容器,而erase则更为通用。随着C++20标准的推出,std::erase和std::erase_if进一步简化了删除操作。通过例程展示了两种方法的使用,并指出STL的发展趋势是简化操作,鼓励学习新标准以更好地应用。

2025-05-10 09:55:54 351 2

原创 跟我学C++中级篇——STL容器的查找对比

C++标准库提供了多种查找方法,其中std::find和std::search是两种常用的查找方式。std::find用于在容器中查找单个特定值,而std::search用于在序列中查找连续的子序列。两者的主要区别在于查找对象、参数类型、时间复杂度和返回值。std::find的时间复杂度为O(N),而std::search的时间复杂度为O(M)~O((N-M+1)*M)。通过示例代码可以更直观地理解两者的应用场景和用法。对比学习这两种查找方法有助于提升编程效率和理解深度。

2025-05-09 22:12:53 452

原创 c++26新功能——Pack indexing

一个技术的出现也会有生命周期中的几个阶段,一般来说只有到了成熟期才会非常广泛的应用于开发者的开发过程中。毕竟大多数的开发者和其服务的公司,都不愿意承担学习和应用的风险。但如果这项技术已经被验证是一个未来,还是应该努力的从开始就跟进它,从而更好的掌握这门技术,能更好的服务于自己的开发实践!

2025-05-04 10:41:50 429 4

原创 c++26新功能——gcc15.1的支持

其实C++新标准的落地,最重要的还是看编译器的支持。即使会有一些小的惊喜,但整体上,编译器对新标准的支持需要不断的迭代才可能完成。特别是面临一些重大标准的推进,可能有较多的基础库需要更新,这就使得编译器自身的更新迭代无论从时间还是工作量上都增加不少的难度。但新的终究会来,老的终将故去。与诸君共勉!

2025-05-03 17:44:46 1123 1

原创 c++26新功能——std::execution

本文是对c++26中的std::execution库的一个入门的分析介绍,目前支持其的平台或编译器尚且在进行中,所以大家可以找到一些编译器尝鲜试试。在翻看一些国外的网站时,发现有的公司已经在生产中使用这个库了。国内的开发者,还要努力跟进啊。

2025-05-01 15:16:19 759 2

原创 跟我学C++中级篇——控制死锁

死锁虽然在面试时反复被问到,但在实践中真正写出来或者遇到的并没有想象的那么多。其实最主要的原因就是大多数的程序员都不会有这种开发的应用场景。但恰恰因为遇到的少,在实际中真正出现时,却不知道从何下手。还是老规矩,把基础掌握好,会灵活的使用工具。只要发现定位了死锁的问题,就可以根据产生死锁的原因有针对的进行解决即可。没有过不了的火焰山。

2025-04-29 19:01:05 1724 6

原创 设计心得——数据结构的意义

数据结构本质就是对数据处理的一种抽象,它做到了相对上整体的最优。即无论从访问、操作和存储都达到了一个最佳的平衡。它既是一种数据意义上的建模也是一种解决问题的思维范式,不但满足了数据处理本身的功能又可以为系统设计和工程实现提供了模式化的解决方案。要想做一个优秀的程序员和架构师,数据结构是绕不过去的。要想学好算法,数据结构更是基础。

2025-04-26 09:47:18 754 4

原创 跟我学C++中级篇——Linux常见的异步编程方式

编程技术中,很多技术是一条点、线、面结合的过程,往往不是一个单纯的知识点就可以搞清楚的。所以,在日常的开发实践中,多和理论知识印证,加强知识的整理和抽象,就会不断的提升自己的编程水平。不要怕总结的不到位甚至可能有一些错误,这都是成长必然的路径!

2025-04-26 09:44:38 260

原创 跟我学C++中级篇——处理对象的复制

本文可以说是对前面的一系列的相关文章的总结,如果只是看这一篇,可能有务虚的感觉。大家可以把本文做为一篇阅读的目录或大纲,逐一展开去学习或分析即可。当然,不是每个开发者对这些内容都感兴趣,大家只要根据自己情况决定即可。

2025-04-25 21:37:10 497 2

原创 跟我学C++中级篇——程序中的临时文件的处理

临时文件就是一个应用处理的中间态,一般情况下,这种中间态是不稳定的,所以临时文件往往意味着随时有可能会被清理。开发者要善于运用这种状态达到自己的一些设计目的,但千万不要在这种临时文件中一时兴起写一些重要的数据。开发者也要有一双善于发现美的眼睛!

2025-04-20 09:11:08 419 4

原创 设计心得——函数参数的封装

学习都是从简单开始,然后到一般再到复杂。但大家可能都知道,大道至简。其实,所有的东西都是如此。每种方法在不同的场景和不同的人眼中,可能都有不同的看法。所以,如何根据设计者本身和实际需求设计出最合适于当下场景的应用,这才是一个优秀的设计者的基本能力。

2025-04-20 09:03:38 541

原创 跟我学C++中级篇——内存异常的分析

内存问题是一个非常重要的问题,即使反复讨论也是必要的。俗话说的好“有千日做贼没有千日防贼”的,内存问题就是这样。再谨慎的开发者或设计者,总有老虎打盹儿的时候。所以提高警惕掌握内存问题的实质,才能更好的从设计和开发层面避免它。哪怕万一真遇到了内存问题,也能从根本上找到问题的根源并加以解决。知其然更要知其所以然。

2025-04-18 20:51:54 755

原创 面试经验杂谈

上面谈得都是一些个人经验,仅供参考。面试是否成功是一个必然加偶然的过程,大概率靠必然,但特殊的情况靠偶然事件。个人能够做到的就是把必然的概率尽量拉足,偶然的事件是不可控的就不要强求了。正如古人云:“尽人事,安天命”,和诸君共勉!

2025-04-18 13:37:47 804

原创 跟我学C++中级篇——尾调优化

通过上面的分析可以发现,TCO是需要条件进行触发的。换句话说,它和inline有些类似,开发者并不能完全决定是否最终会调用TCO,而是由编译器根据情况来确定的。所以,这就给开发者一个提醒,能自己优化的就不要依赖编译器,特别是那些跨平台的开发者。只有开发者自己确定的才是真正可以确定的。依赖其它的情况都可能导致意外的发生,一定要注意!

2025-04-13 09:21:07 679 1

原创 共享内存技术

计算机技术中很多技术都是从一条技术栈中衍生出来,即使目前看起来目前没有太大关系的两条技术栈,很可能未来也可能融合到一起。所以想要把计算机技术搞深入搞精通,就必须抓住主要的技术栈,然后把技术脉络缕清,那么这个技术就没有什么问题了。见微而知著,莫不如此。

2025-04-13 09:13:18 901

原创 内存映射技术

内存映射可以认为是对成本和效率的一种折衷 ,当然这种折衷也是对底层系统(特别是硬件)的一种抽象。而面向抽象进行的操作相对来说要更简单和更容易实施。明白了这一点,开发者就应该明白了如何学习使用内存映射了。

2025-04-12 10:00:58 764

原创 设计心得——状态机

一定要明白状态机的目的和作用,要学会在不同的场景和条件灵活的使用状态机。一般情况下,状态机的设计不要过于复杂,这样不利用状态机的维护。同样过于简单的情况也不一定非得要用状态机。至于如何避免复杂,就记住一句话,拆分状态逻辑,利用中间层处理。状态机和其实现的方式,其实都是重点,重点在于如何将状态机与实际的实现逻辑严格的对应起来,保证状态的稳定和准确,特别是不能忽视某些特定条件的状态转换及行为的细微差异。只要能把握完整的状态流程,状态机的实现也就是一种代码的展开罢了。

2025-04-03 22:50:08 1046

原创 跟我学C++中级篇——In-Place Construction 和placement new

技术的进步不是一朝一夕完成的,它一定是从需求出发,不断的进行完善,然后被抽象出来。无论是RVO还是各种的内存优化,当然也包括今天提到的就地构造等,它们都是对追求效率和安全的一种演进过程。不管是开发者还是设计者,都要多学习这种优秀的经验,不断的融会贯通,提高自己的整体的水平。既要拿来主义,又要明白主义,博采众家之长,这才是学习的最终目的。

2025-04-03 22:47:28 811

原创 设计心得——发布订阅

目前,智能驾驶这个赛道火得很,但其中的车联网系统中就广泛使用了这种机制。所以说,掌握好原理才能更好的拓展一项技术的应用,而不只是机械的模仿。需要说明的是,本篇不是分析发布/订阅机制内部实现的文章,而重点在于将其如何应用于设计当中。尽管篇幅不大,但希望给大家一个另外的角度做为切入点,也就是说,要从不同的角度来看待一个技术问题,才能更好更全面的明白其在整个技术框架中的作用。

2025-03-28 20:51:39 917 2

原创 设计心得——推拉机制

推和拉本身不难理解,也易于实现。但麻烦就在于实际应用场景中的复杂度和各种异常的处理,这才是重点中的重点。所以大家一定要根据实际情况进行平衡,保证所需。而不是为了应用推拉去实现推拉机制。

2025-03-26 11:42:03 841 1

原创 设计心得——事件机制的实现

本文主要是给不了解或者想学习事件机制的开发者一个入门的方法,重点在于提供一个初窥门径的视点。在明白了事件机制的原理后,可以根据自己的技术水平的增长和认知思想的不断提高,设计出一个相对更完善更合理的事件系统。万事开头难,临门第一脚。以后有机会在此基础上将一个相对事用的事件系统给大家剖析一下,那么就更容易在事件系统上总结提高。愿与诸君共勉!

2025-03-24 13:14:50 477 1

原创 为什么会有虚拟内存

本文不是讲虚拟内存技术本身或者说其技术的特点。重点是讲述为什么会存在虚拟内存,这是给后来开发者或者说设计者的一个解决问题的思路。活学活用别人的思想,真正领会这些技术架构的思想并学习和吸收成为自己的思想,才能更好的解决面对的问题,进而从整体上提高自己的技术。最后,技术的发展,不是凭空想象的,它一定是实际需求推动的。所以理论和实践相结合,是重中之重!

2025-03-23 09:55:25 669 1

原创 设计心得——安全性和健壮性

程序的开发,往往不是一两个因素影响,而是一个多重的因素整体互相影响确定的。而一个优秀的设计者就是要在这些因素中,找到关键的因素,也就是常说的主要矛盾,并处理在某些情况下,次要矛盾转化为主要矛盾时如何处理(比如程序异常时,保存了部分的文件怎么办)。所以,有丰富的理论和实践形成的指导思想,才是解决问题的关键所在。好医生是在病患未起时就将其消灭。也就是所谓的预防大于治疗。而目前看来,在软件开发中,仍然是以“治疗”为主。希望开发者们能尽量把重心前移,减少亡羊补牢的情况!

2025-03-23 09:52:45 722

原创 设计心得——如何实现接口

爱看武侠小说的知道有形意拳这个拳法,形和意,一外一内。而在武林中又有一句话“练拳不练功,到老一场空;练功不练拳,到老也枉然(犹如无舵船)!其实编程也是如此,光明白理论,不进行实践,那么进步就无从谈起;反之,光进行实践不学习理论,则方向无法把握,事倍功半。前面反复提及,计算机编程是一个理论和实践高度结合的技术,理论和实践是互相促进互相发展的,请大家务必明白这一点。既要扎实的推进编程的水平,又要不断的多看一些英文的资料紧跟技术发展的潮流和方向。

2025-03-22 21:46:10 703

原创 跟我学C++中级篇——std::not_fn

std::not_fn这个模板函数非常有意思,在前面我们学习过wrapper(包装器),其实它就是通过封装一个包装器来实现返回值的非。/* 未指定 */ not_fn( F&& f );(1) (C++17 起)(C++20 起为 constexpr)constexpr /* 未指定 */ not_fn() noexcept;(2) (C++26 起)这里面的f参数是一个Callable对象。

2025-03-21 22:49:26 743 2

原创 设计心得——作用域处理

简单的东西,往往意味着灵活。因为简单,所以应用的广泛,应用的广泛就意味着应用的场景丰富。不同的场景下的应用就有可能有细节的不同。而细节的丰富恰恰是C++的一个特点,也是为广大开发者觉得不容易把握的地方。作用域看似简单,但它和代码编写直接结合了起来。往往代码的水平就可以通过作用域的控制窥见一斑。而作用域还有一个特点,即使设计的较差甚至非常差,在一些中小程序中对程序的运行也不会有什么影响。往往就会让大多数中低程序员将其忽视。简单不代表容易把握,切记!

2025-03-21 22:47:58 946

原创 Debain12安装——手动磁盘分区

记得当初安装系统时,看到LVM还有组、卷什么的,当时就晕了。为了赶进度,只好回到自动分配。不过当对Linux系统越来越熟悉后,还是想手动搞一把,上面就是对手动安装过程的一次总结,可以为大家的借鉴。网上很少有这种手动处理的过程,也算是一种总结供大家参考吧。

2025-03-16 09:06:57 1818 2

原创 跟我学C++中级篇——void处理

老生常谈,其实就是一个原则。在合适的场景下应用合适的方法,不教条不僵化。尽量减少使用不是强制不使用,难免有各种场景下不得不用,那么就需要认真的处理即可。有隐患不是说就一定会出现,只要把握内部的机理,就不会出现问题。

2025-03-16 08:09:19 905

原创 设计心得——多态

勿在浮砂筑高台。只有掌握技术本身,才能更好的在设计上展开应用。换句话说,一个优秀的设计者本身必须是一个优秀的开发者。这也是前一段时间网上经常说的所谓“PPT架构师”的味道。知其然并知其所以然,顺势而为,才可能有一个优秀的设计出来。

2025-03-15 19:11:21 367

原创 设计心得——粒度

学习设计就是从这些小的基础的东西一步步走过去的,不要妄想着上来就指挥千军万马并且打胜仗。甘罗八岁拜相,不谈真假,但几千年出不来几个。回头看看世界军事史,有名的军事家都是一枪一枪打出来的。没有人天生就是元帅。软件设计亦是如此,实践出真知。

2025-03-09 10:42:01 639

原创 设计心得——继承和实例

设计的学习难度说大很大,说小很小,关键看开发者的知识驾驭程度和水平。条条大路通罗马,但有没有捷径,这种捷径是否适合每个开发者?是不是有更适合具体到某一个人的捷径?这就需要每一个开发者和设计者不断的探索。总体而言,多学习理论知识,多写代码,多看优秀的开源代码和框架,多和优秀的设计者进行有效的交流。在此基础上不断的思考和实践,对大多数开发者来说,是一条不错的提升之路!

2025-03-08 09:38:40 432 2

原创 设计心得——分层和划分模块

设计一个从抽象到具体,从整体到细节,不断具体而微的过程。俗话说得好“教的曲儿唱不得”。设计不像技巧,多问两下多看两下代码就会用了。所以设计中的一些具体的手段和方法,要不断的从不同的角度不同的场景进行分析学习,并不断在实践中进行检验。反思得失,总结教训,形成自己的一套解决问题、处理问题的逻辑和流程。最终升华为自己的设计思想。这一定是一个长期的,不断的否定之否定的过程!愿与诸君共勉!

2025-03-07 22:27:56 1049

linux设备驱动开发

本书从浅到深介绍了LINUX操作系统上的驱动开发的过程,值得推荐。

2018-11-17

masstree算法论文

目前的底层的分布式数据库如ROCKSDB等都使用的LSM的算法,本文使用了masstree这种算法来优化其处理。

2018-11-17

虹膜开源的算法

本文是国外的一款开源的虹膜识别框架的介绍,它的源码是可以直接使用的,但是需要优化。

2018-11-17

mixin白皮书

mixin是一个闪电交易快速的点点对的数字交道项目,它拥有非常好的技术栈。

2018-10-11

steamr白皮书

steamr是一个用来做数据去中心化的网络和市场相关的区块链项目,主要提供去中心化的云服务。

2018-10-11

阿希链白皮书

阿希链是一个用javascript写的侧链,主要用来完成多链间的通信,有一定的特色,可以借鉴。

2018-10-11

大数阶乘算法的一个例子

小数的阶乘比较好做,但是阶乘的数量变化非常快,很快会溢出,这里采用一种变通的方法,可以实现相当大的数的阶乘,如果在这个基础上进一步扩展,能进行更大的阶乘算法。

2018-10-06

Sql批量操作数据

在SQLSERVER的多条数据操作时,使用SQLBULKCOPY等几种方式的对比,这篇文档就是整理了这些使用的方法。

2018-10-05

电能质量闪变的测量

电能质量是电力行业一个重要的部分,本论文从实际出发,论证了闪变测量的方法。

2018-10-05

安卓编译JAR包和SO

这个是用ECLIPSE编译JAR包和SO的一个教学录像,非常适合对c++不熟悉的人编译使用。

2018-10-01

JAVA并发编程设计原则与模式

一本比较老的书,讲得多线程和并发技术,是一个入门的比较浅显的书籍。

2018-10-01

代码管理核心技术及实践

代码管理是开发过程一个重要的环节,好的代码管理可以为团队的开发提供安全的保护和合作,本书就是讲述在不同环境中如何使用主流的代码管理软件和方式。

2018-09-30

IOTEX白皮书

物联网和区块链的结合,实现了链中链和跨链的通信,通过特有零知识证明来解决用户隐私问题。

2018-09-30

bancor协议白皮书

bancor协议是目前区块链研究的一个重要方向,跨链不同的TOKEN之间的兑换一直是一个问题,这里给出一个解决的方案。

2018-09-29

DERP白皮书

DREP区块的白皮书,是一个新的区块链的技术,如果大家对这个感兴趣,可以下来看看。

2018-09-29

朗新WEBSERVER接口(南网和天津电网)

适用于朗新目前的所有接口,平台语言C#,主要是对电力系统SG186的跨平台调用。也适于于同样的WEBSERVER工程跨平台使用。使用说明书已打在压缩包里。

2009-03-16

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除