如何在没有STL的情况下用c++中的Key创建和访问内存块

How to create and access a memory block with Key in c++ without STL

本文关键字:创建 Key 中的 访问 内存 c++ STL 情况下      更新时间:2023-10-16

我创建了一个内存块,如下

typedef struct tPersistNav{
UInt8 DriverID;
const char  *Start[NUM_START_LOC][STRING_SIZE];
const char  *End[NUM_START_LOC][STRING_SIZE];
UInt8 Matrix[NUM_START_LOC][NUM_DEST_LOC][DAYS_OF_WEEK] [HOURS_OF_DAY];
}tpersisnav;
tpersisnav *memory=new tpersisnav

我的问题是,我想基于DriverID创建多个内存块,并且只需要使用DriverID密钥访问同一个块。例如,如果驱动程序ID=1,那么它应该只访问映射到驱动程序ID=1的上述存储器块。

任何指针都将对有帮助

如果密钥是无符号字节,那么哈希表似乎会带来很多开销。您可以只使用一个由256个指针组成的数组。这将代码减少到最低限度,并且NULL指针的空间开销可能不是杀手。这是一个恒定的静态空间开销,所以如果你想避免的话,就不需要动态分配。

如果你期望实际的键数远少于256个,你可以使用双重间接方案:使用一个256字节的向量,它将索引包含在一个小的块指针向量中。这样,两个或多个keyId可以共享一个块;这不太可能有用,除非是在未分配的键的情况下,所有这些键都将在块指针列表中具有NULL指针的索引。仍然没有太多代码;空间开销可能会增加25%(如果使用所有256个密钥id),但可能会增加一半(如果使用的密钥id少于64个)。这假设您准备重新分配块指针列表,或者提前知道其最大大小。

以上所有假设密钥在[0255]的范围内随机分布。相反,如果它们是从0开始连续分配的,那么问题显然要简单得多。