gsl_vector如何拥有gsl_block?

时间:2019-01-21 14:17:47

标签: gsl

在GSL的参考手册中,其写为​​

  

指针块存储矢量元素所在的存储块的位置(如果有)。如果向量拥有此块,则将owner字段设置为1,并在释放向量时释放该块。

但是“如果向量拥有该块”是什么意思?

以下是gsl_vector的结构

typedef struct
{
  size_t size;
  size_t stride;
  double * data;
  gsl_block * block;
  int owner;
} gsl_vector;

1 个答案:

答案 0 :(得分:1)

根据文档:

  

为了一致性,所有内存都通过gsl_block结构分配。

下一步:

  

向量和矩阵是通过切片基础块来制作的。

基本上,您可以使用现有的内存块来使用新的向量,例如,使用alloc_from_blockalloc_from_vector函数(由于某种原因未公开)。在这种情况下,owner设置为0,并且当您释放矢量时,初始块将保持分配状态:

void
FUNCTION (gsl_vector, free) (TYPE (gsl_vector) * v)
{
  RETURN_IF_NULL (v);

  if (v->owner)
    {
      FUNCTION(gsl_block, free) (v->block) ;
    }
  free (v);
}