首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gsl_vector如何拥有gsl_block?

gsl_vector如何拥有gsl_block?
EN

Stack Overflow用户
提问于 2019-01-21 14:17:47
回答 1查看 239关注 0票数 2

在GSL的参考手册中写着:

指针块存储向量元素所在的存储器块的位置(如果有的话)。如果向量拥有该块,那么所有者字段将设置为1,并且在释放向量时,块将被解除分配。

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

以下是gsl_vector的结构

代码语言:javascript
复制
typedef struct
{
  size_t size;
  size_t stride;
  double * data;
  gsl_block * block;
  int owner;
} gsl_vector;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-21 16:45:01

根据文件:

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

下一步:

向量和矩阵是通过切片底层块来实现的。

基本上,您可以使用现有的内存块来获得一个新的向量,例如,使用(由于某种原因而没有文档化)函数alloc_from_blockalloc_from_vector。在这种情况下,owner设置为0,当释放一个向量时,初始块保持分配状态:

代码语言:javascript
复制
void
FUNCTION (gsl_vector, free) (TYPE (gsl_vector) * v)
{
  RETURN_IF_NULL (v);

  if (v->owner)
    {
      FUNCTION(gsl_block, free) (v->block) ;
    }
  free (v);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54291867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档