C/C++教程

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

本文主要是介绍面试题:如何用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释放这段内存

这篇关于面试题:如何用malloc申请64位对齐的地址的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!