在GSL的参考手册中写着:
指针块存储向量元素所在的存储器块的位置(如果有的话)。如果向量拥有该块,那么所有者字段将设置为1,并且在释放向量时,块将被解除分配。
但是,“如果向量拥有块”是什么意思呢?
以下是gsl_vector的结构
typedef struct
{
size_t size;
size_t stride;
double * data;
gsl_block * block;
int owner;
} gsl_vector;发布于 2019-01-21 16:45:01
根据文件:
为了保持一致性,所有内存都通过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);
}https://stackoverflow.com/questions/54291867
复制相似问题