哪个更优化:`new`还是`calloc`?

这个问题在这里已经有了答案:

  • 我在哪些情况下使用malloc vs new? 18个答案

  • 好吧,每个人都告诉过你关于new不初始化内存等,但他们忘记了值初始化语法:

    char *buffer = new char[size]();
    

    所以我会争辩说你总是使用new 。 如果你想初始化内存,使用上面的语法。 否则,请删除括号。


    这个问题不能真正回答,因为它基于不正确的假设,即new分配内存但不初始化它。 事实恰恰相反:

    new不仅分配内存(除非你使用“placement new”),它还会调用一些对象的构造函数。 即new功能比calloc更多。

    在C ++中,如果你觉得你需要为一些可变大小的数组分配一些内存,可以考虑先使用标准容器,比如prefer

    std::vector<char> buf( 1024 );
    

    过度

    char *buf = new char[1024];
    

    calloc并没有真正与new相媲美; 它更接近operator new (他们不一样)。 calloc会将分配的内存归零,而operator newmalloc则不会。 new在存储位置构造一个对象,但calloc不会。

    // Using calloc:
    my_object* p = static_cast<my_object*>(std::calloc(1, sizeof(my_object)));
    ::new(static_cast<void*>(p)) my_object(10);
    
    // Using operator new:
    my_object* p = static_cast<my_object*>(::operator new(sizeof(my_object)));
    ::new(static_cast<void*>(p)) my_object(10);
    
    // using new:
    my_object* p = new my_object(10);
    
    链接地址: http://www.djcxy.com/p/78483.html

    上一篇: Which is more optimal: `new` or `calloc`?

    下一篇: Initialization of a normal array with one default value