Hasty Briefsbeta

双语

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指针来实现内存对齐。