如何在没有STL的情况下用c++中的Key创建和访问内存块
How to create and access a memory block with Key in c++ without STL
我创建了一个内存块,如下
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开始连续分配的,那么问题显然要简单得多。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 如何在没有STL的情况下用c++中的Key创建和访问内存块