Fork me on GitHub
上一页 1 2 3 4 5 6 7 ··· 13 下一页
摘要: 在x86和ARM平台上,整数除法是相对较慢的操作。不巧的是除法在日常开发中使用频率并不低,而且还有一些其他常用的运算依赖于除法操作,比如取模。因此频繁的除法操作很容易成为程序的性能瓶颈,尤其是在一些数值计算程序里。 人们当然也想了很多办法优化,比如在除数是2的幂的时候,除法可以用速度更快的位运算来替 阅读全文
posted @ 2025-05-18 22:19 apocelipes 阅读(992) 评论(4) 推荐(6)
摘要: 写c/c++或者rust的开发者应该对条件编译不陌生,条件编译顾名思义就是在编译时让代码中的一部分生效或者失效,从而控制编译时的代码执行路径,进而影响编译出来的程序的行为。 这有啥用呢?通常在编写跨平台代码的时候有用。比如我想开发一个文件操作库,这个库有全平台统一的接口,然而各大操作系统提供的文件和 阅读全文
posted @ 2025-03-31 10:05 apocelipes 阅读(646) 评论(0) 推荐(0)
摘要: 最近在更新系统的时候发现pacman的命令行界面变了,我有很久没更新过设备上的Linux系统了,所以啥时候变的不好说。但这一变化成功勾起了我的好奇心。新版的更新进度界面如下: 新的更新进度界面能同时显示多个进度条,而且并没有依靠ncurses这个传统的TUI库。为啥我能断定没有用ncurses呢,因 阅读全文
posted @ 2025-03-05 22:55 apocelipes 阅读(780) 评论(2) 推荐(7)
摘要: 今天来看看Linux和一些常见的BSD系统上自带的hashmap。 是的,系统自带的。因为POSIX标准定义了一些常见的数据结构(比如哈希表、二叉搜索树、队列)和算法(比如二分查找和快速排序),这些接口数量不少而且实现起来没什么难度,因此各个想要兼容POSIX标准的操作系统/C函数库都乐意于实现这些 阅读全文
posted @ 2025-01-27 11:01 apocelipes 阅读(685) 评论(1) 推荐(3)
摘要: 网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰。 这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句话的含金量。 这个说法的杀伤力在于它虽然不对,但也不是全错,真真假假很容易让人失去判断力。 死锁检测 阅读全文
posted @ 2025-01-05 08:36 apocelipes 阅读(1429) 评论(2) 推荐(4)
摘要: 介绍一些开发中常用的slice关联的性能优化手段。鉴于golang编译器本身捉鸡的优化能力,优化的成本就得分摊在开发者自己的头上了。 这篇文章会介绍的优化手段是下面这几样: 创建slice时预分配内存 操作slice前预分配内存 slice表达式中合理设置cap值 添加多个零值元素的优化 循环展开 阅读全文
posted @ 2024-10-25 11:06 apocelipes 阅读(1661) 评论(0) 推荐(5)
摘要: 逃逸分析算是go语言的特色之一,编译器自动分析变量/内存应该分配在栈上还是堆上,程序员不需要主动关心这些事情,保证了内存安全的同时也减轻了程序员的负担。 然而这个“减轻负担”的特性现在却成了程序员的心智负担。尤其是各路八股文普及之后,逃逸分析相关的问题在面试里出现的频率越来越高,不会往往意味着和工作 阅读全文
posted @ 2024-10-21 10:06 apocelipes 阅读(2073) 评论(9) 推荐(9)
摘要: 今天我们来说说一个大家每天都在做但很少深入思考的操作——类型转换。 本文索引 一行奇怪的代码 go的类型转换 数值类型之间互相转换 unsafe相关的转换 字符串到byte和rune切片的转换 slice转换成数组 底层类型相同时的转换 别的语言里是个啥情况 总结 一行奇怪的代码 事情始于年初时我对 阅读全文
posted @ 2024-09-30 08:01 apocelipes 阅读(921) 评论(1) 推荐(4)
摘要: 本文并不讨论“延迟初始化”或者是“懒加载的单例”那样的东西,本文要讨论的是分配某一类型所需的空间后不对类型进行构造(即对象的lifetime没有开始),更通俗点说,就是跳过对象的构造函数执行。 使用场景 我们知道,不管是定义某个类型的对象还是用operator new申请内存,对象的构造函数都是会立 阅读全文
posted @ 2024-09-15 19:57 apocelipes 阅读(591) 评论(1) 推荐(1)
摘要: 一转眼go1.23都快发布了,时间过得真快。 不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。 对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。 本文默认Linux环境,不过这个优 阅读全文
posted @ 2024-07-31 11:03 apocelipes 阅读(955) 评论(2) 推荐(2)
上一页 1 2 3 4 5 6 7 ··· 13 下一页