在GSL的参考手册中,其写为
指针块存储矢量元素所在的存储块的位置(如果有)。如果向量拥有此块,则将owner字段设置为1,并在释放向量时释放该块。
但是“如果向量拥有该块”是什么意思?
以下是gsl_vector的结构
typedef struct
{
size_t size;
size_t stride;
double * data;
gsl_block * block;
int owner;
} gsl_vector;
答案 0 :(得分:1)
根据文档:
为了一致性,所有内存都通过gsl_block结构分配。
下一步:
向量和矩阵是通过切片基础块来制作的。
基本上,您可以使用现有的内存块来使用新的向量,例如,使用alloc_from_block
或alloc_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);
}