2011-04-29 110 views

回答

3

这是一个古老的C技巧。如果您不知道需要多少个side_distances,通常是因为它从nodeinfo的一个实例变为另一个实例,则您声明数组大小为零。然后,当为节点分配内存时,将按照(sizeof(nodeinfo))的定义分配结构的大小,并在该特定实例(+something * sizeof(double))中加上额外的内存。结果是对于这个实例,我们有足够的内存用于我们指定大小的数组。

这是一个“技巧”,对于大多数应用你可以分配一个单独的数组并在其中存储一个指向它的指针。将所有内容保存在一个分配中是(尝试的)优化。

但是,IIRC只允许使用C++标准,而不是C标准。在C中,您应该将其定义为灵活大小的数组side_distances[],但毫无疑问,许多编译器允许C语言中的C++版本作为扩展。无论哪种方式,虽然结构本身不包含任何元素的空间,但它将正确对齐double

2

这是一个在C的struct hack我不知道它在Python(或用Cython)的行为,但我认为你最好使用其他一些数据结构

在C语言中,它被用来假装有一个“可变大小的数组”。
虽然它需要动态分配内存。

+0

这不是OP的代码。这是scipy。我不明白你为什么推荐使用另一种数据结构。 Cython是一种用Python语法编写C代码的方法。狂野! +1 – 2011-04-29 21:35:46

+0

你是对的@大卫。我不应该建议我不熟悉的语言 - 建议(有点)删除。 – pmg 2011-04-29 21:39:53

相关问题