malloc, calloc and new
and New malloc
2023-09-14 09:15:01 时间
1. malloc vs calloc
void *malloc(size_t size);
void *calloc(size_t num, size_t size);
函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。
1. 参数指定方式不同
malloc()函数由参数size指定总的要分配的内存空间的大小,字节单位
calloc()函数通过两个参数num和size来指定,总分配内存空间大小=num*size,字节单位
如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址
2. 所分配空间的初始化
malloc()不对所分配的内存空间进行初始化,因为是从heap中分配空间,分配之前如果该片空间已经被使用过,其值会保存下来。所以malloc()分配后不能直接使用,为了保险起见应该先做初始化处理。如果在malloc()后没有适当的初始化的话,在程序开始运行时(内存空间还没有被分配使用过因而保持着0初始化的状态)能正常进行,但经过一段时间(内存空间已经被分配使用过,因而其中可能已经不是全0状态)后就可能会出现问题。
calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。
所以,可以不太严谨地说,calloc = malloc + memset
两者都返回void*类型,在C,C++中,void* 类型可以强制转换为任何其它类型的指针。因为调用malloc或者calloc都需要将返回的指针强制转换为所需要的类型。
2. new()
New()是C++中的导入的内存分配函数。它有以下几种典型的调用方法。
为指定类型的分配存储一个数据的空间,并初始化为0.
pointer_variable = new datatype;
为指定类型分配存储一个数据的空间,并初始化为value所指定的值。
pointer_variable = new datatype(value);
为指定类型分配存储多个数据的空间。需要注意的是,指定初始值是用(),而指定个数
pointer_variable = new datatype[num];
与malloc()不同的是,new()会根据所指定的数据类型自动计算所需要的空间大小,这个与calloc()有点类似。
与malloc()和calloc()不同的是,new()返回的指针类型为所指定的指针类型,不需要再进行类型强制转换。
与calloc()相似,new()在缺省的调用中会将所分配的内存初始化为0。但是new()比calloc()更强大的地方在于它还可以指定任意的初始化值。
此外,Malloc()和calloc()所分配的内存都是用free()进行释放,而new()则于delete()配对使用。
相关文章
- [Node] Install packages correctly and avoid attacks
- [Angular 9] Improved Dependency Injection with the new providedIn scopes 'any' and 'platform'
- [NativeScript] Create new application and run emulator
- [PWA] 13. New db and object store
- [Linux] Install java and add JAVA_HOME, PATH
- [JUnit] Assumption and assertAll
- [Angular 9] Improved Dependency Injection with the new providedIn scopes 'any' and 'platform'
- [React] Preventing extra re-rendering with function component by using React.memo and useCallback
- [PWA] 8.Unobtrusive update: Delete old cache and only keep one, hard refresh to let new SW to take control
- [AngularJS] Services, Factories, and Providers -- value & Providers
- [Big Data] pageRank and link analysis && MapReduce
- Node Js And The New Web Front End
- where and when navigation target url is retrieved by SAP UI5 Framework
- atitit.避免NullPointerException 总结and 最佳实践 o99
- 【Codeforces 1091D】New Year and the Permutation Concatenation
- 【Codeforces 1106D】Lunar New Year and a Wander
- 【Good Bye 2017 B】 New Year and Buggy Bot
- 【27.34%】【codeforces 611D】New Year and Ancient Prophecy
- 【25.33%】【codeforces 552D】Vanya and Triangles
- 【codeforces 782C】Andryusha and Colored Balloons
- Failed to find Build Tools revision 24.0.2 Install Build Tools 24.0.2 and sync project
- 零基础如何入门渗透and黑客「web安全」
- Paper:《Graph Neural Networks: A Review of Methods and Applications—图神经网络:方法与应用综述》翻译与解读
- How_to_setup_Qt_and_openCV_on_Windows
- 论文解读:STANet | A Spatial-Temporal Attention-Based Method and a New Dataset for Remote Sensing Image