恭喜,你发布的帖子
发布于 2023-02-07 16:56:26
45楼
你指的是一个子程序用一个索引?还是所有子程序用一个索引?
-----------------------------------------
一个子程序实例用一个独立的索引。如果A子程序需要调用n次来实现对n个同类型对象的操作就自然要n个索引了。
如果连这个索引都舍不得出,那就别谈实现了。
-------------------------------------------------
那么,甲子程序必须独有一个表格登记住自己在哪一个地方(是唯一一个的地方)调用的时候曾经分配过了到了什么地址。是不是?
---------------------------------------------------
正解。也可以不用地址注册表,采用从索引遍历DB的反式来定位,但显然用地址表定位快一些。
----------------------------------------
甲子程序事前知道自己会被调用过多少次吗?预留多大的地方做这个表格?
--------------------------------------------
子程序事前怎么会知道自己被调用多少次呢?设计者事后知道。
至于DB尺寸问题,可以简单处理也可以变化处理。我采用动态方式,也很简单。
子程序所需的私有字节设计后是可以统计的,这个就是它的DB尺寸(加上几个DB头:标识字节、DB字节长度,标识字节纯粹是为了设计者观察容易识别设计的)。
-----------------------------
“唯一一个地方”这个怎么标识?不同地方使用的数据当然是不同的啦-、
---------------------------
想了看了半天可能说的是主程序里面调用子程序需要的索引吧?
是这样,如果不在主程序里的调用,保存子程序DB索引的变量可以采用本身DB来做。比如A调用B,B的DB索引就用A的DB来存储了。这是自然而然的事情。
但关键是主程序调用A,A的DB索引就没法用主程序DB来存储了,因为主程序没有DB。所以就需要一个保存在主程序里调用子程序所需要使用到的索引。也就是V中的一个变量。(其他区也可以)
其实我是用DB管理表头部的一块区域来作为主程序调用子程序的索引存放的。一个道理。
-----------------------------------
至于你说的哪些这个周期怎么知道上个周期调用时是同一个位置之类,我也不知道。采用索引无需知道。
<采用索引无需知道。>
你尝试一下说明我上面说的甲子程序在这三个扫描周期内,分配到了几片的地址?
我抽出来再说一遍:
如果第一个扫描周期,只有甲子程序调用了一次。
第二个扫描周期,甲子程序是不同于第一个扫描周期的地方调用了两次。
第三个扫描周期来了。情况与第二个扫描周期情况一样的。
------------------------
01234甲6789
01甲34567甲9
01甲34567甲9
……
-----------------------
上述三个扫描周期。甲:表示子程序。数字:表示程序网络号。甲的出现表示在这个网络调用了一次甲子程序。
用人眼看。程序供三个地方调用过甲子程序。应该分配到三片地址。
第一个甲用空间1,
第二个甲用空间2,
第三个甲用空间3,
第四个甲用空间2,
第五个甲用空间3。
但是你说无需知道,是怎么个分配?那你是不是分配成了1;1;2;1;2了?
请填写推广理由:
分享
只看
楼主