C++ 存储向量的精确内存图像

C++ 存储向量的精确内存图像,c++,parsing,optimization,C++,Parsing,Optimization,在我当前的应用程序中,我需要创建一个案例库,如下所示 基于实例的学习范式在人工智能社区中广为人知 案例库需要在两次调用之间持久地存储到 应用程序 然而,我担心的是,这意味着序列化/反序列化 (可能是JSON或键值对的轻量级格式)施加了如此多的压力 I/O开销,即编程良好的索引机制(在 内存中对案例库的描述)只会加速一小部分,因此 没有实质性的好处 现在我认为有两种解决办法 a) 尝试直接索引到文件中,同时执行I/O和索引 时间 b) 以某种方式保存案例库的内存中表示的内存映像 然后将“文件解析”

在我当前的应用程序中,我需要创建一个案例库,如下所示 基于实例的学习范式在人工智能社区中广为人知

案例库需要在两次调用之间持久地存储到 应用程序

然而,我担心的是,这意味着序列化/反序列化 (可能是JSON或键值对的轻量级格式)施加了如此多的压力 I/O开销,即编程良好的索引机制(在 内存中对案例库的描述)只会加速一小部分,因此 没有实质性的好处

现在我认为有两种解决办法

a) 尝试直接索引到文件中,同时执行I/O和索引 时间

b) 以某种方式保存案例库的内存中表示的内存映像 然后将“文件解析”简化为一个简单的memcpy(包括文件的内存映射)。注意 然后,文件格式是二进制的,而不是基于UTF-8的,如a)所示

有没有人遇到过类似的问题,并尝试过类似的方法
b行)

你考虑过吗?

你的向量有多复杂?您是否需要在多个平台(即endianness)之间共享数据?您确定当前的序列化计划会导致速度减慢吗?对我来说,这听起来像是过早的优化。我建议首先让它工作,然后如果你发现IO是一个瓶颈(通过实际分析),那么试着找到一个更优化的解决方案。同意Chad的观点-这听起来像是过早的优化。嗯,选择它可能是过早的-但是仅仅是为了做一些时髦的事情(可能根本不在这个应用程序中)。有办法吗?这会有很多可移植性问题,因为我们在这里是位级别的,对吗?这更多地取决于你存储在向量中的类型,而不是向量本身。如果您的类型不重要(符合
memcpy
),那么这应该相当容易。使用内存映射文件将更加困难。为此,您需要有一个自定义分配器。