C++面试常见问题总结

1、new和malloc的区别
1)分配方式:new根据数据类型分配内存,会调用构造函数,malloc根据数据大小分配内存;
2)类型:new是操作符,可重载,而malloc是库函数;
3)返回类型:new返回指定对象的指针,malloc返回的是void*,所以一般需要进行内存转换;
4)销毁方式:new分配的内存用delete销毁,delee会调用析构函数;malloc要用free销毁;
5)分配失败时:new会抛出bad_alloc的异常,可采用nothrow的方法禁止抛出异常而返回NULL,而malloc分配失败会返回NULL;

2、虚拟地址到物理地址的映射
内存管理单元MMU通过APR(active page register)寄存器将虚拟地址转换为物理地址,内核通过向与执行进程相对应的、供用户进程使用的APR设定适当的值,保证各用户拥有独立的虚拟空间,APR共有8组,由0到7,进程的虚拟地址空间以页或者段为单位进行管理,一组APR对应一页,每一页最多可以分配128个块(8kb);虚拟地址的高位3比特决定了对应的页,APR的11-0位决定了物理地址基地址的块嫡长子,加上虚拟地址的12-6比特得到物理内存的块地址,再加上作为块内偏移值的虚拟地址的5-0位,就得到了最后的地址。

3、STL内存分配之配置器
第一级配置器:allocate()直接使用malloc(),deallocate()直接使用free()
第一级配置器以malloc(),free(),realloc()等c函数执行实际的内存配置、释放、重配置操作
第二级配置器:主要有内存池和自由链表构成,维护16个自由链表,负责16种小型区块的次配置能力,内存池(memory pool)以malloc()配置而得,如果内存不足,转调用第一级配置器,如果需求区块大于128byte,就转调用第一级配置器

二级空间配置器使用内存池+自由链表的形式避免了小块内存带来的碎片化,提高了分配的效率和利用率。先判断要开辟的空间是否大于128byte,如果大于则认为是大块内存,直接调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值