软件学报

北大核心,INSPEC,JST,Pж(AJ),EI

国内刊号:11-2560/TP

国际刊号:1000-9825

软件学报杂志2026年第3期:Go语言程序的内存性能与安全问题实证研究

发布日期:

作者:李清伟,丁伯尧,张昱,陈金宝

单位:李清伟,中国科学技术大学 计算机科学与技术学院, 安徽 合肥 23002611,丁伯尧,中国科学技术大学 计算机科学与技术学院, 安徽 合肥 23002602,张昱,中国科学技术大学 计算机科学与技术学院, 安徽 合肥 23002603,陈金宝,中国科学技术大学 计算机科学与技术学院, 安徽 合肥 23002604

关键词:Go;内存性能;静态代码分析;内存安全;实证研究

基金:国家自然科学基金 (62272434)

Go语言 (Go programming language, Golang)作为一门新兴编程语言, 利用编译时的逃逸分析与运行时的垃圾回收实现了高效的内存自动管理, 同时提供了interface、slice、map等内建数据类型, 显著提升了开发效率和程序性能. 然而, 这些特性也带来与传统C/C++语言不同的内存性能与安全性挑战. 通过静态代码分析, 实证研究了Go语言程序的内存性能与安全问题. 通过设计基于CodeQL的GitHub开源代码分析框架PatStat, 利用声明式语言QL分析开源仓库中的内存性能相关的代码模式, 并辅助人工总结和自动检测内存安全问题. 研究涵盖Go程序的内存访问特征和安全问题模式. 在分析996个近1年内更新的Go语言开源项目后发现: Go程序中域访问和解引用操作在内存访问中占比较高, 分别为25.44%与17.63%, 意味着需要在程序分析或优化中关注域敏感性和指向分析. 此外, Go特有的interface类型转换引发的隐式内存分配也是程序优化的重点. 通过人工分析130个涉及内存泄漏、无效内存地址或空指针解引用、悬垂指针的Issues, 总结10类Issue模式, 其中悬垂指针问题在Go语言中较少见. 这些Issues通常需要约30天修复, 但大多只需修改数十行代码即可完成. 研究成果为优化Go语言程序和减缓内存安全问题提供了参考. 此外, 针对包含切片表达式赋值, 可能导致内存泄漏的Issue模式开发代码检查工具, 并在真实项目中报告了6个Issues, 其中1个得到了肯定回复.

来源:2026年第3期

《软件学报》期刊编辑部

查看软件学报杂志2026年第3期

联系我们

  • 地址:北京8718信箱
  • 电话:010-62562563
  • E-mail:jos (a) iscas. ac. cn

咨询工作人员