面试题:如何用malloc申请64位对齐的地址

大致的要求是你可以使用malloc来申请内存,并使用free来释放内存,然后你所使用的malloc能申请出来的地址是16位对齐的,也就是说你的malloc申请出来的地址值能被2(16位=2字节)整除
现在要求你能申请并释放64位对齐的空间,也就是说你返回的指针需要指向一个能被8(64位=8字节)整除的地址,并且从这个地址往后还有与你申请空间等大的空间
当时这个问题答了一半,从面试官那里得到的方案大致是先申请空间然后返回一个偏移了的地址,然后利用多申请的空间来存储偏移量
我个人的想法是,先申请8+size的空间(8表示8字节=64位,size为要申请的空间字节数),然后根据malloc返回的指针ptr的地址值来决定如何返回地址值,比如说ptr的值为8N+2,那么就准备返回ptr+6,而若ptr的值为8N,那么就准备返回ptr+8。在这种构造方式下,被返回的指针的前面2字节必然是安全可用的,就可以用这2个字节的空间存一下指针的偏移量,在释放这种特殊的指针时,往前查2个字节就可以找到指针偏移量,从而定位到真正的内存起始位置,并调用free释放这段内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值