编写过C或者C++程序的都知道,我们要手动申请或释放内存。Go的内存是自动管理的,不需要我们考虑内存的申请和释放问题。尽管我们不需要考虑内存的管理问题,但了解Go在内存管理方法做了什么,有助于我们写出高效的程序。先来一张Go内存分配的全局图分配方法顺序分配器当我们在编程语言中使用顺序分配器,我们只需要在内存中维护一个指向内存特定位置的指针,当用户程序申请内存时,分配器只需要检查剩余的空闲内存...
看了一周多的文章,垃圾回收器的实现的确很复杂,而且,Go的垃圾回收实现,每个版本都在改进。Go目前使用的并发(与用户代码并发执行)的三色标记清除算法。如下图Mutator - 用户程序Collector - 垃圾回收器Mutator Assist(或者称为Mark Assist) - 辅助回收器垃圾回收的整个过程下面是各个阶段清理终结阶段 暂停应用程序,为下一阶段的标志阶段做准备工作。标...
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd" 输出: "bb"解答很容易想到使用暴力法来解决,检查字符串s所有的子串,从所有...
GMP模式当Go程序启动时,会为机器上的每一个虚拟核分配一个逻辑处理器(P)。同时,如果你的CPU处理器支持超线程技术,每一个超线程对于Go程序都是一个虚拟核。上面是我的MacBook Pro的配置,可以看到有一个双核的CPU处理器。同时Intel Core i5支持超线程技术,每个CPU物理核允许两个线程同时不冲突地使用该CPU物理核。那么对于Go程序,就有4个虚拟核可以并行地运行系统线程...
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶示例 2:输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶...