📄 tst220.mal
字号:
# a test checking BAT reference counting under various situationsfunction steal(bb:bat[:any_1,:any_2]) :bat[:any_1,:any_2]; i:= bbp.getLRefCount(bb); io.printf("enter function refcount =%d[2,3]\n",i); loc:= bb; i:= bbp.getLRefCount(bb); io.printf("local in function refcount =%d[3,4]\n",i); return bb;end steal; function createone():bat[:int,:str]; b:= bat.new(:int,:str); return b;end createone; b:= bat.new(:int,:str); i:= bbp.getLRefCount(b); io.printf("refcount =%d[1]\n",i); bat.insert(b,1,"bat B"); io.print(b); i:= bbp.getLRefCount(b); io.printf("refcount =%d[1]\n",i); #handle an alias, which isn;t used! b2:= b; i:= bbp.getLRefCount(b); io.printf("after assignment refcount =%d[2]\n",i); #re-use a bat variable b3:= b; cnt:= aggr.count(b3); # forced use i:= bbp.getLRefCount(b); io.printf("after 2nd assignment refcount =%d[3]\n",i); #re-use a bat variable b3:= user.createone(); i:= bbp.getLRefCount(b); io.printf("after 3rd assignment refcount =%d[2]\n",i); i:= bbp.getLRefCount(b3); io.printf("assignment refcount =%d[1]\n",i); #re-use a bat variable b4:= algebra.select(b,"bat C","bat C"); io.print(b4); i:= bbp.getLRefCount(b); io.printf("after 4rd assignment refcount =%d[2]\n",i); # remove by assignment b2:= b3; i:= bbp.getLRefCount(b); io.printf("after 5rd assignment refcount =%d[1]\n",i); io.printf("call function\n"); d:= user.steal(b); i:= bbp.getLRefCount(b); io.printf("return from function refcount =%d[2]\n",i); io.printf("check self replacement, overrule refcount!\n"); b:= user.steal(b); i:= bbp.getLRefCount(b); io.printf("return from function refcount =%d[2]\n",i); z:= bbp.getRefCount(); zl:= bbp.getLRefCount(); zn:= bbp.getNames(); io.print(zn,z,zl);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -