删除2D链接列表数组,如何?

时间:2016-07-19 10:59:26

标签: c++ performance cpu-speed

我有这样的功能删除我的2维结构,但它不是太快,我想有一个更快的方法来做到这一点(像memset或其他东西),任何想法将不胜感激;)

 void freeAlllistNode(LISTNODEPTR *sPtr[][10])
{   LISTNODEPTR temp;
for (char i = 0; i<19; i++){
    for (char di = 0; di<10; di++){
        while (sPtr[i][di] != NULL){
            temp = *(sPtr[i] + di);
            *(sPtr[i] + di) = temp->next;
            free(temp);
        }
    }
  }
}

这是我的结构定义,如果有必要的话

typedef struct listNode{
char* val ;
struct listNode *next;
}LISTNODE;
using LISTNODEPTR = LISTNODE*;

1 个答案:

答案 0 :(得分:4)

没有。在任何情况下,memset都不是malloc / free的替代品。他们完全不同的事情。 memset可以某种方式替代malloc / free的提议是对动态内存和动态范围分配如何工作的基本误解。

甚至可以远程实现类似的东西的是具有自定义分配类的标准C ++库容器。也就是std::liststd::vector等,而不是这个手动链接列表实现。

标准C ++库容器采用可选的模板参数来指定自定义分配器类。必须编写一个自定义分配器类来管理容器的动态内存分配,这类似于分配大块内存,然后对于放入容器中的每个值,将它们分段输出。然后,当容器被破坏时,所有分配的内存可以在少量短delete s中处理。

当然,也可以通过手动链接列表实现来实现此方法。但无论如何,它还需要做很多工作,只要完成所有工作,为什么要浪费时间使用手动链接列表,只需使用std::list