How to store Go pointers from assembly
a year ago
- #Assembly
- #Garbage Collection
- #Go
- Go工具链包含一个采用Plan 9语法的汇编器,并为平台特定指令使用自定义命名。
- Go的垃圾回收器采用并发机制,通过与应用程序代码并行运行来最小化暂停时间。
- 指针存储操作通过写屏障进行插桩,以便垃圾回收器感知新引用。
- 出于性能考虑,Go不对栈指针存储进行插桩,这曾需要最终栈重扫描机制。
- Go 1.8引入了更广泛的写屏障机制,显著减少了全局暂停时间。
- 在汇编代码中处理指针存储需要手动实现写屏障。
- 虽然受限,但通过特定构建标签仍可链接到写屏障的运行时符号。
- 在Go中为并发哈希表分配128位对齐的内存槽具有挑战性,需要创造性解决方案。
- 一种变通方案涉及操作切片类型和unsafe指针来实现内存对齐。