【编程找工作笔记】在IT行业中,面试过程中常常会涉及到编程基础知识的考察,其中包括内存管理的知识。本篇笔记主要讨论了`malloc`函数的使用及其与`new`操作符的对比。 1. `malloc`函数详解: `malloc`是C语言中的动态内存分配函数,其原型为`extern void *malloc(unsigned int num_bytes)`。它通过`<malloc.h>`或`<alloc.h>`头文件引入。`malloc`的功能是在堆上分配长度为`num_bytes`字节的内存块。如果分配成功,返回指向这块内存的指针,失败则返回`NULL`。分配的内存需通过`free`函数释放,以防止内存泄漏。以下是一个简单的示例: ```c #include<stdio.h> #include<malloc.h> int main(){ char *p; p=(char *)malloc(100); if(p) printf("Memory Allocated at: %x/n",p); else printf("Not Enough Memory!/n"); free(p); return 0; } ``` 2. `malloc`函数声明: `malloc`返回`void *`类型的指针,表示未定义类型的指针。在C/C++中,`void*`可以隐式转换为任何其他类型的指针。这使得`malloc`分配的内存可以被用作任何类型的对象存储。当`size`为0时,`malloc`仍会分配一个零长度的内存块并返回有效指针。使用`malloc`时,务必检查返回值,即使请求的内存很小。 3. `malloc`与`new`的区别: - `new`操作符返回指定类型的指针,并自动计算所需大小。例如,`int *p = new int;`分配一个`int`大小的内存,`int* parr = new int[100];`分配100个`int`的内存。 - 相反,`malloc`需要显式地指定字节数,并在返回后进行类型转换。如`int* p = (int *) malloc (sizeof(int));`。 - `new`会执行默认的构造函数初始化,而`malloc`分配的内存不进行初始化,内容是随机的。 - 使用`new[]`创建数组时,`malloc`可以通过分配足够的内存来模拟相同的效果,如`int* p = (int *) malloc (sizeof(int) * 100);`。 总结:`malloc`和`new`都是用于动态内存分配,但在使用方式和特性上有所不同。`malloc`更底层,需要手动计算类型大小并进行类型转换,且不负责初始化。而`new`操作符提供了更多的便利,如自动计算大小、类型安全以及对象初始化。在面试或工作中,理解和掌握这两种内存分配方式对于优化代码性能和避免内存错误至关重要。
剩余34页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助