gsl - gsl_vector 如何拥有 gsl_block?
问题描述
在 GSL 的参考手册中写道
指针块存储向量元素所在的内存块的位置(如果有的话)。如果向量拥有该块,则所有者字段设置为 1,并且当向量被释放时,该块将被释放。
但是“如果向量拥有块”是什么意思?
以下是gsl_vector的结构
typedef struct
{
size_t size;
size_t stride;
double * data;
gsl_block * block;
int owner;
} gsl_vector;
解决方案
根据文档:
为了一致性,所有内存都是通过 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);
}
推荐阅读
- apache-spark - 在 map reduce pyspark 中编写复杂函数
- mariadb - Mariadb Galera Cluster Multi-Master 查询执行速度慢
- c# - 播放列表未播放
- apache-kafka - 当只有 1 个代理可以访问时,是否可以生成 kafka 主题?
- selenium-webdriver - 如果类属于不同的测试,如何使用TestNG按顺序执行2个测试类?
- java - JavaFX 中的寻路
- javascript - 如果已知对象的其他属性,如何返回对象的属性?
- python - Python itertools.groupby() 使用具有多个键的元组
- c# - 创建没有构造函数注入或 ServiceLocator 的具有依赖关系的类的实例
- javascript - 如何判断页面加载时检查了哪些复选框?