快速检索(void *)内存块

时间:2010-09-15 13:39:07

标签: c++ c

我有一个系统将void *返回到内存块。该内存块存储不同类型的连续数据记录(int,char,double等),并给出每个记录中每个字段的字节数。我基本上查找记录的类型并获取记录的值。要检索所有记录,我做

switch(type)

{

   case 'int' : \*(int*)(ptr+index)

   case 'char': \*(char*)(ptr+index)

}

当我需要查看300000条记录时,这需要花费很多时间。是否有更快的方式来浏览所有记录?

3 个答案:

答案 0 :(得分:0)

如果单个块可以是多种类型,只能在运行时解析,则必须在switch语句中分配给处理程序。请注意:

  1. union通常用于C中以节省空间
  2. switch语句非常快并转换为常量查找表

答案 1 :(得分:0)

如果我正确理解你的问题 - 我假设你正在浏览每条记录,并说“对于每条记录i,如果它的类型是'char',那么访问位置{{1}的记录}”。

如果你知道你必须提前访问多少条记录,你不能先将它们全部缓存吗?

如果我完全偏离正轨,原谅我不理解你的观点。

答案 2 :(得分:0)

您的评论最终提供了足够的信息来回答这个问题:您正在写信ostringstream。这意味着您可能在交换机内部进行了大量的字符串操作。弄清楚如何优化这一点,你的性能问题应该消失。

(为了说服自己就是这种情况,只需注释掉所有引用流的代码并再次运行程序)