Model 检查链接列表的模型

Model 检查链接列表的模型,model,spin,Model,Spin,我查看了旋转模型检查器。但是,它没有用于动态分配的功能。 是否有其他模型检查器可用于动态分配?您可以通过多种方式实现动态分配。在所有这些情况下,您都需要对分配数量有一个上限(这通常不是一个限制因素) 您将为要分配的内容定义一个结构类型,并将其中的一些放入一个数组中。您将在该数组中使用索引来引用该结构。所以,有点像这样: #define data_t byte typedef data_record { data_t me; bool allocated; // .... your

我查看了旋转模型检查器。但是,它没有用于动态分配的功能。
是否有其他模型检查器可用于动态分配?

您可以通过多种方式实现动态分配。在所有这些情况下,您都需要对分配数量有一个上限(这通常不是一个限制因素)

您将为要分配的内容定义一个结构类型,并将其中的一些放入一个数组中。您将在该数组中使用索引来引用该结构。所以,有点像这样:

#define data_t byte

typedef data_record {
  data_t me;
  bool allocated;
  // .... your data fields here ....
}

#define NUMBER_OF_DATA_RECORDS 10

data_record data_record_array[NUMBER_OF_DATA_RECORDS];

#define DATA_RECORD_ALLOCATED(dt)    data_record_array[(dt)].allocated
#define DATA_RECORD_ME(dt)           data_record_array[(dt)].me
// Assigns data_ptr with a free data_record index
inline data_record_allocate (data_t data_ptr)
{
   data_ptr = 0; 
   do
   :: data_itr >= NUMBER_OF_DATA_RECORDS -> break
   :: else ->
        if
        :: ! DATA_RECORD_ALLOCATED (data_itr) -> 
           DATA_RECORD_ALLOCATED (data_itr) = true
           DATA_RECORD_ME (data_itr) = data_it
           break
        :: else -> data_itr++
        fi
   od
 }
现在您可以定义一些
内联线来分配和释放这些内联线。有很多选择。例如,要分配,只需遍历
data\u record\u array
即可找到未
分配的
data\u record
。有点像这样:

#define data_t byte

typedef data_record {
  data_t me;
  bool allocated;
  // .... your data fields here ....
}

#define NUMBER_OF_DATA_RECORDS 10

data_record data_record_array[NUMBER_OF_DATA_RECORDS];

#define DATA_RECORD_ALLOCATED(dt)    data_record_array[(dt)].allocated
#define DATA_RECORD_ME(dt)           data_record_array[(dt)].me
// Assigns data_ptr with a free data_record index
inline data_record_allocate (data_t data_ptr)
{
   data_ptr = 0; 
   do
   :: data_itr >= NUMBER_OF_DATA_RECORDS -> break
   :: else ->
        if
        :: ! DATA_RECORD_ALLOCATED (data_itr) -> 
           DATA_RECORD_ALLOCATED (data_itr) = true
           DATA_RECORD_ME (data_itr) = data_it
           break
        :: else -> data_itr++
        fi
   od
 }
然后自由就像:

inline data_record_free (data_t data_ptr)
{
  DATA_RECORD_ALLOCATED (data_itr) = false
  data_itr = NUMBER_OF_DATA_RECORDS
}
更复杂的一点是,将所有自由指数(一开始是所有指数)放入“自由指数”通道。分配时,仅从通道读取;当你有空的时候,只要把它推回到频道上就行了