【发布时间】:2010-09-15 22:13:04
【问题描述】:
我有一个将 void* 返回到内存块的系统。此内存块存储不同类型(int、char、double 等)的连续数据记录,并给出每条记录中每个字段的字节数。我本质上是查找记录的类型并获取记录的值。要检索所有记录,我会这样做
switch(type)
{
case 'int' : \*(int*)(ptr+index)
case 'char': \*(char*)(ptr+index)
}
当我必须浏览 300000 条记录时,这会花费很多时间。有没有更快的方法来浏览所有记录?
【问题讨论】:
-
您能否发布(并正确格式化)真实代码?这不可能是正确的。
-
定义“很多时间”。我们说的是微秒还是秒?如果是后者,那么您很可能正在将内存交换到磁盘,并且只能通过更多 RAM 来解决。 300,000 条记录并没有那么大,简单地访问这 300,000 条记录的内存应该会非常快。
-
秒。在每个切换案例中,我将值附加到 ostringstream。这需要更长的时间吗?
-
C或C++?我相信这个答案对于不同的语言可能会有很大的不同...... -
@Rajesh:您的代码不是合法的 C 或 C++。然而,答案取决于。这取决于你对值做什么,你从哪里得到这个内存块等等。你怎么知道 switch 语句是一个瓶颈?你用过探查器吗?我简直不敢相信 switch 是个问题。