在日常的 ABAP 开发里,很多人一看到赋值语句,就会下意识认为系统已经把一整份数据复制完了。这个直觉放在很多场景里并不完全正确。尤其当你处理的是string、xstring、internal table 这类动态数据对象,或者你正在使用 data reference、object reference 时,ABAP 的运行时会采用一种更聪明的策略:能不复制真实数据,就尽量先不复制;等到真的需要修改时,再执行实际拷贝。SAP 官方把这套机制概括为 dynamic data objects 的sharing,它和copy-on-write一起,构成了理解 ABAP 内存行为的一把钥匙。(SAP Help Portal)
这个主题看似偏底层,实际上与业务开发距离并不遥远。你在写 RAP 的 behavior implementation,处理 Gateway OData 请求中的大批量数据,做 CDS 查询结果的中间缓存,或者在 classic report 里搬运数万行内表时,都会直接或间接受到它的影响。理解这套机制,不只是为了炫技,而是为了在设计代码时避免错误判断内存成本,也避免误以为某次赋值一定带来了昂贵的数据