C++ - new与malloc的差别

  • malloc是C++语言的标准库函数;而new是C++语言中的操作符。
  • new返回指定类型的指针,而且能够自己主动计算所需空间的大小;而malloc必需要由用户自己计算所需空间大小,并在返回后强行转换为实际类型的指针。
  • malloc仅仅管内存分配,不能对所得的内存进行初始化,其所获内存空间中上的值是随机的;而new除了分配内存处,还会对对象做初始化。
时间: 2024-08-27 13:42:14

C++ - new与malloc的差别的相关文章

new/malloc的差别

1. malloc()函数 1.1 malloc的全称是memory allocation.中文叫动态内存分配. 原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块.假设分配成功则返回指向被分配内存的指针.分配失败返回空指针NULL. 当内存不再使用时,应使用free()函数将内存块释放. 1.2 void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空

C++之new和malloc差别

在C++程序猿面试中.非常easy被问到new 和 malloc的差别.偶尔在quora上逛.看到Robert Love的总结.才发现自己仅仅知道里面的一两项就沾沾自喜,从来没有像这位大牛一样去细致思考这些问题,借着这篇文章细致探讨下这个经典问题. 一.new是操作符.而malloc是函数 void* malloc(size_t); void free(void*); void *operator new (size_t); void operator delete (void *); void

【C语言天天练(九)】动态内存分配

引言:数组的元素存储于内存中连续的位置上.当一个数组被声明时.它所须要的内存在编译时就被分配. 可是,我们能够使用动态内存分配在执行时为它分配内存. 一块内存的生命周期能够分为四个阶段:分配.初始化.使用.释放. 内存的分配一般使用C函数库里的malloc函数(原型:void *malloc(size_t size)). 关于malloc函数应该注意一下几点: 1.malloc的參数就是须要分配的内存的字节数. 2.malloc所分配的是一块连续的内存. 3.分配成功.则返回指向分配内存起始地址

malloc()与calloc差别

Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other. Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from

malloc、calloc、realloc三者的差别

1.malloc 作用:分配内存块 原型:void *malloc(size_t size);size表示要分配的字节数 返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回NULL. 假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换.比如: char* p; p=(char*)malloc(20); 假设size是0,则malloc在堆中分配一个长度为0的项,而且返回一个指向那项的有效指针.比如: int *p1=(int*)malloc(0) //ok,p

多进程与多线程差别

 在Unix上编程採用多线程还是多进程的争执由来已久,这样的争执最常见到在C/S通讯中服务端并发技术 的选型上,比方WEBserver技术中.Apache是採用多进程的(perfork模式,每客户连接相应一个进程,每进程中仅仅存在唯一一个运行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接相应一个线程,全部线程都在一个进程中). 从Unix发展历史看,伴随着Unix的诞生进程就出现了.而线程非常晚才被系统支持,比如Linux直到内核2.6.才支持符合P

char* 和char[]的差别

下面内容均来自互联网,系笔者汇总并总结. 1. 问题介绍 问题引入: 在实习过程中发现了一个曾经一直默认的错误,相同char *c = "abc"和char c[]="abc",前者改变其内 容程序是会崩溃的,而后者全然正确. 程序演示: 測试环境Devc++ 代码 #include <iostream> using namespace std; main() { char *c1 = "abc"; char c2[] = "

堆和栈的差别(转过无数次的文章)

一.预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为下面几个部分    1.栈区(stack)—   由编译器自己主动分配释放   ,存放函数的參数值,局部变量的值等.其    操作方式相似于数据结构中的栈.    2.堆区(heap)   —   一般由程序猿分配释放,   若程序猿不释放,程序结束时可能由OS回    收   .注意它与数据结构中的堆是两回事,分配方式倒是相似于链表,呵呵.    3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一

Linux程序存储结构与进程结构 堆和栈的差别

摘要:本文主要讲述了Linux系统中.程序存储结构(代码区.数据段和BBS区)与进程的基本结构(代码区.数据段.BBS区.堆和栈).以及堆和栈的差别. Linux程序存储结构与进程结构 1.Linux程序存储结构 在Linux系统下,程序是一个普通的可运行文件,图1是一个Linux下ELF格式可运行文件的基本情况. 图1 ELF格式可运行文件的基本信息 能够看出,此ELF格式可运行文件在存储时,没有调入到内存,分为代码区(text),数据区(data)和为初始化区(bss)3个部分.各段基本说明