面试题:如何用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释放这段内存

上一篇:java-泛型-参数


下一篇:设计模式(GOF)之我见(2)——Template Method