值语义(Value semantics)和引用语义(reference semantics)描述了动态内存对象在多个变量引用它时, 可以表现的两种方式。 用于特定类型的动态内存对象的语义, 对该类型的对象如何消耗内存产生了重要影响。 本质上,使用值语义的引用变量总是有它自己的、它所引用的内存对象的唯一副本。值语义变量类似于静态变量;像静态变量一样,它直接绑定到它所代表的内存对象。尽管变量只是一个引用,但在语义上它是内存对象本身。 相比之下,使用引用语义的引用变量被理解为指向内存对象的指针。内存对象在语义上独立于引用变量。该对象可以在许多这样的变量之间共享。 Value Semantics 的典型代表:
使用值语义解析对 ABAP 内表、字符串或 boxed组件的多次引用。 这意味着:
由于内部表和字符串可能会变得非常大,ABAP 通过采用 我们来看一个具体的例子。 源代码如下: REPORT z.DATA: lv_size TYPE abap_msize, lv_size1 LIKE lv_size, lv_consumed LIKE lv_size.DATA: lt_table TYPE TABLE OF tadir, lt_table1 LIKE lt_table.SELECT * INTO TABLE lt_table FROM tadir.cl_abap_memory_utilities=>get_total_used_size( IMPORTING size = lv_size ).WRITE:/ 'total consumed: ' , lv_size.lt_table1 = lt_table.cl_abap_memory_utilities=>get_total_used_size( IMPORTING size = lv_size1 ).lv_consumed = lv_size1 - lv_size.WRITE:/ 'total consumed after = ' , lv_consumed.APPEND lt_table[ 1 ] TO lt_table.CLEAR: lv_size.cl_abap_memory_utilities=>get_total_used_size( IMPORTING size = lv_size ).lv_consumed = lv_size - lv_size1.WRITE:/ 'total consumed after copy on write:', lv_consumed. 这个测试程序的5个关键点:
|
|