c++ - 删除二维链表数组,如何?

标签 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*;

最佳答案

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

唯一可以远程实现类似功能的是带有自定义分配类的标准 C++ 库容器。也就是说,std::liststd::vector 和其他,并且没有任何此手动链接列表实现。

标准 C++ 库容器采用可选的模板参数来指定自定义分配器类。必须编写一个自定义分配器类来管理容器的动态内存分配,类似于分配大块内存,然后为放入容器中的每个值分段分配它们。然后,当容器被销毁时,所有分配的内存都可以在几个简短的 delete 中处理掉。

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

关于c++ - 删除二维链表数组,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38456643/

相关文章:

java - 与 "iteration is linear in the sum of the number of entries and the number of buckets"混淆

asp.net 大量请求排队和上下文切换

linux - 阿特拉斯安装 : Really need to get past CPU throttle check

android - 在 textView 上更新 CPU 频率(howto?)

c++ - 调整大小时出现 std::vector 和内存错误

C++ 模板函数中的左值和右值

c++ - 为什么 C++11 类型特征不是别名模板?

c++ - 不使用 `new` 分配指针数组?

java - ListView Holder 检查复选框 Bug

linux - 设置核心速度 - linux