new 和 malloc 的区别:
1. malloc? 是C语言申请内存的方式,与free()相对应,是C/C++标准库的函数。new/delete? 是C++分配内存和释放的关键字,不需要头文件,需要编译器支持
2. malloc 申请的内存返回值类型为? ?"void *"? 类型,因此在使用时要将其强制转化为需要的类型,且需要指定好要申请内存的大小; new? 一般返回对象类型指针,其类型与对象严格匹配,编译器会自动计算内存的大小。
3.?new 内存分配失败时,会抛出 bad_alloc 异常。 malloc 分配内存失败时返回NULL。
malloc 的底层实现 malloc 是在堆空间上分配内存,在堆空间上存在? “program break“ 指针,将对空间分为两部分:映射区域; 未映射区域。malloc 申请的为? "未映射区域"? 。 "未映射区域" 可以看作一个长链表,调用 malloc()函数时,它沿着连接表寻找一个大到足以满足用户请求所需要的内存块,一块的大小与用户申请的大小相等,另一块的大小就是剩下来的字节。
在1G内存的计算机中能否malloc(1.2G)?为什么?(2021浙江大华二面问题) 答:是有可能申请1.2G的内存的。 解析:回答这个问题前需要知道malloc的作用和原理,应用程序通过malloc函数可以向程序的虚拟空间申请一块虚拟地址空间,与物理内存没有直接关系,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。 ?
指针与引用的相同和区别;如何相互转换? 1? 指针是指向某一个内存的地址,而引用是某一内存的别名。
2? ?sizeof? 引用”? 指的是引用变量的大小,?sizeof? 指针” 是指针自身大小? ?4字节
3? 指针? 自增/自减? 是内存地址的增减, 而引用 是变量数值的增减
4 引用只能在定义时被初始化一次,之后不可变;指针可变;
5??引用不能为空,指针可以为空;
指针转引用:int? *p? = 1;? ? void fun( int &va?);? ? fun( *p )
引用转指针:int a = 1; int &va = a;? ?int * p? ;p = &va;
|