Fork me on GitHub
上一页 1 2 3 4 5 6 ··· 13 下一页
摘要: 最近公司里的新人问了我一个问题:这段代码是啥意思。这个问题很普通也很常见,我还是个新人的时候也经常问,当然,现在我不是新人了但我也经常发出类似的提问。 代码是长这样的: type BussinessObject struct { _ [0]func() ID uint64 FieldA string 阅读全文
posted @ 2025-08-17 22:11 apocelipes 阅读(856) 评论(2) 推荐(8)
摘要: 很多初级甚至中级开发会滥用atomic,因为在他们的世界观里atomic比mutex轻量,性能总是优于锁的。 这话不能算错,但有个很重要的前提,那就是原子操作竞争不激烈的时候。 “竞争激烈”是指什么呢,指的是有很多线程在同一个资源上大量执行原子操作的情况。 落在这种情况下原子操作反而会成为性能拖油瓶 阅读全文
posted @ 2025-08-03 21:50 apocelipes 阅读(569) 评论(9) 推荐(3)
摘要: 记录一下从开源代码里学来的短字符串比较优化。 这个优化只适用于长度在八字节以下的字符串,且只适用于优化相等比较。 原理 想要判断字符串相等,常见的有利用strcmp、利用字符串的hash或者利用正则表达式等。 就速度而言strcmp > hash > 正则,而灵活性上正则 > hash ≈ strc 阅读全文
posted @ 2025-07-21 21:42 apocelipes 阅读(399) 评论(1) 推荐(0)
摘要: c++26最近刚敲定标准,新增了许多重量级特性。 不过目前能实际上手测试的特性不多,毕竟标准刚刚确定,比较大的变更里只有“资源嵌入”或者用标准文档里英文名“resource inclusion”这个新特性可以尝鲜。 虽然这篇文章标题叫指南,但实际上更像实验记录,而且现在属于早期阶段编译器对资源嵌入的 阅读全文
posted @ 2025-07-14 10:09 apocelipes 阅读(1863) 评论(3) 推荐(5)
摘要: 这篇文章主要讲讲c++的ADL,顺便说说为什么很多c++的IDE都会让你尽量不要include用不上的头文件。 和其他c++文章一样,这篇也会有基础回顾环节,所以不用担心看不懂,但读者最好还是得有c++的基础知识并且对c++11之后的内容有所了解。 好了,下面我们进入正题吧。 偶遇报错 最近工作收尾 阅读全文
posted @ 2025-07-06 06:20 apocelipes 阅读(891) 评论(1) 推荐(4)
摘要: 记录一下如何在Linux环境下运行时获取动态库路径。 只讨论Linux amd64和arm64环境,因为使用的办法都是平台相关的不具备可移植性。 准备 一般来说动态库并不需要关心自己所在的文件系统上的路径,但业务有那么多总有一两个会有特殊需求。 现在给定一个动态库里的函数A,需求是要知道这个函数A是 阅读全文
posted @ 2025-06-09 00:17 apocelipes 阅读(570) 评论(0) 推荐(1)
摘要: 最近一直在重构优化老系统,所以性能优化相关的文章会比较多。 这次的是有关循环处理map时的性能优化。预分配内存之类的大家都知道的就不多说了,今天来讲点大伙不知道的。 要讲的一共有三点,而且都和循环处理map有关。 不要用for-range循环清空map 这里要讨论的“清空”是指删除map中所有键值对 阅读全文
posted @ 2025-05-30 10:00 apocelipes 阅读(830) 评论(0) 推荐(3)
摘要: 最近料理老项目的时候被unsafe坑惨了,这里挑一个最不易察觉的错误记录一下。 这个问题几乎影响近几年来所有的go版本,为了方便讨论我就用最新版的1.24.3做例子了。 线上BUG 我们有一个收集集群信息的线上系统,这个系统有好几个数据源而且数据量比较大。众所周知Go语言总是会在一些关键性能点上拉跨 阅读全文
posted @ 2025-05-26 10:01 apocelipes 阅读(757) 评论(0) 推荐(2)
摘要: 在x86和ARM平台上,整数除法是相对较慢的操作。不巧的是除法在日常开发中使用频率并不低,而且还有一些其他常用的运算依赖于除法操作,比如取模。因此频繁的除法操作很容易成为程序的性能瓶颈,尤其是在一些数值计算程序里。 人们当然也想了很多办法优化,比如在除数是2的幂的时候,除法可以用速度更快的位运算来替 阅读全文
posted @ 2025-05-18 22:19 apocelipes 阅读(899) 评论(4) 推荐(6)
摘要: 写c/c++或者rust的开发者应该对条件编译不陌生,条件编译顾名思义就是在编译时让代码中的一部分生效或者失效,从而控制编译时的代码执行路径,进而影响编译出来的程序的行为。 这有啥用呢?通常在编写跨平台代码的时候有用。比如我想开发一个文件操作库,这个库有全平台统一的接口,然而各大操作系统提供的文件和 阅读全文
posted @ 2025-03-31 10:05 apocelipes 阅读(577) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 13 下一页