全部配置 / KN-BINARY-MEMORYMODEL

内存模型

Xbinary=memoryModel · KN-BINARY-MEMORYMODEL · 编译器参数(Native) · 同源入口 memory-model

重要:极高 · 决定产物/平台 默认:有默认取值 场合:场景可配 来源:CPF-KMP-CMP社区有改 · 缺文档

待解决问题。文档缺口:此项相对上游有改动,但尚未挂接社区文档。社区差异(取值/默认/目标限制等)应有对应说明后再挂链。

默认值:strict。未指定时默认 strict(KonanConfig 默认值)。使用场合:场景可配。场景可配:有明确目标(性能、包体、安全、兼容)时再改。

它是做什么的

用途。选择内存模型(影响并发与对象语义)。KonanConfig 显式读取该选项;未指定时默认 MemoryModel.STRICT。

影响。影响回收策略、停顿、分配路径与内存表现;须与目标及 runtime 构建匹配,非法组合可能在编译期直接报错。

适用场景。场景可配。有明确需求再改,无需求时保持发行版默认更稳妥。改前核对目标限制与联动项,改后做冒烟。

约束与联动。相对上游:在 KonanConfig 中显式读取 BinaryOptions.memoryModel;未指定时默认 MemoryModel.STRICT。(注:Legacy MM 已不可用;experimental 路径会警告 deprecated。)

取值说明

枚举

可写取值含义使用场景
strict严格内存模型社区侧未指定时 KonanConfig 常默认 STRICT;按并发/对象语义需求选择
relaxed宽松内存模型需要更宽松并发语义时;切换后做并发冒烟
experimental实验性内存模型实验/对比;勿默认带入发布基线

含义/场景依据:MemoryModel.STRICT;sanitize UPSTREAM / KonanConfig 约定; MemoryModel.RELAXED; MemoryModel.EXPERIMENTAL

定义依据:konan/BinaryOptions.kt 在仓库中打开konan/MemoryModel.kt 在仓库中打开

怎么用

  1. 配置入口:build.gradle.kts → ohosArm64.binaries.all { freeCompilerArgs += "-Xbinary=memoryModel=true" }
  2. 示例
// 文件:build.gradle.kts(应用的 Kotlin 模块,例如 composeApp)
kotlin {
  ohosArm64 {  // 按实际 native target 调整
    binaries.all {
      freeCompilerArgs += "-Xbinary=memoryModel=true"
    }
  }
}
  1. 生效:Sync 后执行该目标的 compile/link。
  2. 验证:编译日志出现 `-Xbinary=memoryModel=true`。
  3. 回滚:从 binaries.all 的 freeCompilerArgs 中删除该项后 Clean 并重编。
  4. 注意:实验项无稳定兼容保证;改前留可回滚配置。

同源旧旗标

应用工程只按上方「怎么用」里的 Gradle 示例配置。下面列出编译器还认识的旧名字,避免对着旧文档混用。

优先级:同时指定时 -Xbinary=memoryModel 优先;二者最终都写入 BinaryOptions.memoryModel。

  • 推荐旗标-Xbinary=memoryModel=<model>(键 Xbinary=memoryModel) — 应用工程用 binaries.all { freeCompilerArgs += "-Xbinary=memoryModel=…" }。
  • 旧旗标(勿用)-memory-model <model>(键 memory-model) — 专用 CLI,已 deprecated;仅当未设 -Xbinary=memoryModel 时回填同一内部键。

默认行为 strict

不写这个配置时,编译器会怎么处理?

此选项有固定默认取值(见下方说明),不设置时编译器使用该默认值。

未指定时默认 strict(KonanConfig 默认值)。

相关文档

以下摘抄原文中与本配置最相关的段落,便于速读;完整上下文请点原文。

溯源与对照

状态
实验(-X,兼容性不保证)
版本基线
2.2.21-1.0.0
定义位置类型
Native 二进制选项(BinaryOptions / -Xbinary)
源码路径
kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BinaryOptions.kt 在仓库中打开
相对上游的改动
相对上游:在 KonanConfig 中显式读取 BinaryOptions.memoryModel;未指定时默认 MemoryModel.STRICT。(注:Legacy MM 已不可用;experimental 路径会警告 deprecated。)