我是模块编写新手,需要一个循环缓冲区[1]和一个向量。由于Linux内核显然提供了一些数据结构(lib)(列表、树),我想知道是否有向量等价?
虽然我认为我有很好的能力编写自己的代码,但我更喜欢这样的库,以防止代码重复和避免错误。
[1]撰写问题kfifo时发现,也可能需要Queues in the Linux Kernel。
fnatzsnv1#
据我所知,直到4.1Linux内核才有向量的实现。而且没有任何意义,因为向量可以用Linux内核中已经提供的实现的基本数据结构来设计。
ymdaylpp2#
我来得有点晚,但如果有人需要用C实现广义向量,可以在初始化时使用空指针和sizeof运算符来完成。它应该看起来像这样:
sizeof
struct MyVec { void *data; size_t stored_sizeof; size_t size; size_t allocated_size }; # define STARTING_ALLOCATED_SIZE 10 void MyVec_init(struct MyVec *self, size_t sizeof_data_type) { self->stored_sizeof = sizeof_data_type; self->data = malloc(self->stored_sizeof * STARTING_ALLOCATED_SIZE); self->size = 0; self->allocated_size = STARTING_ALLOCATED_SIZE; } void MyVec_deinit(struct MyVec *self) { free(self->data); } bool MyVec_at(struct MyVec *self, size_t index, void *to_fill) { if (index >= size) return false; memcpy(to_fill, self->data + (index * self->stored_sizeof), self->stored_sizeof); return true; }
以及您可能需要的所有其他方法,只要确保在索引、添加/删除元素等时使用stored_sizeof即可。
stored_sizeof
2条答案
按热度按时间fnatzsnv1#
据我所知,直到4.1Linux内核才有向量的实现。而且没有任何意义,因为向量可以用Linux内核中已经提供的实现的基本数据结构来设计。
ymdaylpp2#
我来得有点晚,但如果有人需要用C实现广义向量,可以在初始化时使用空指针和
sizeof
运算符来完成。它应该看起来像这样:以及您可能需要的所有其他方法,只要确保在索引、添加/删除元素等时使用
stored_sizeof
即可。