f*l 发帖数: 161 | 1 我被面试问到的。要求实现一个自己的空间分配,释放函数,使用c的malloc,free。
要求返回地址必须是16的倍数。
我的方法是每次多分配16个字节,这样总有一个是16的倍数。然后返回16倍数的地址。
然后保存一个全局的映射《返回地址,实际地址》。
对方似乎不满意。说为什么要返回16倍数的地址,是因为为了提高效率,每次寻址空间
释放都快。我的方法虽然实现了功能,但是既没有提高效率,又浪费了空间。
我曾想过自己分配一个大空间,然后自己管理,但似乎太过于复杂,而且内存碎片的管
理超出我的能力了。
不知各位有没有好的方法? |
X****r 发帖数: 3557 | 2 这种面试问题首先要明白他想问你什么。要是他就想问你自己怎么实现内存管理,那你
就不要怕麻烦,反正也就是动动嘴皮子而已。
要说你的方法,其实也是不错的,除了其实不需要这个全局的映射之外。
你直接把返回地址和实际地址之间的偏移量存到返回地址前一个字节就行了。
你还可以指出如果是实际的问题的话基本上不用自己实现。
比如glibc里有memalign和posix_memalign
【在 f*l 的大作中提到】 : 我被面试问到的。要求实现一个自己的空间分配,释放函数,使用c的malloc,free。 : 要求返回地址必须是16的倍数。 : 我的方法是每次多分配16个字节,这样总有一个是16的倍数。然后返回16倍数的地址。 : 然后保存一个全局的映射《返回地址,实际地址》。 : 对方似乎不满意。说为什么要返回16倍数的地址,是因为为了提高效率,每次寻址空间 : 释放都快。我的方法虽然实现了功能,但是既没有提高效率,又浪费了空间。 : 我曾想过自己分配一个大空间,然后自己管理,但似乎太过于复杂,而且内存碎片的管 : 理超出我的能力了。 : 不知各位有没有好的方法?
|
f*l 发帖数: 161 | 3 谢谢。
也许对方就是考我知不知道那个函数,sign。
这个函数memalign是如何实现的?
【在 X****r 的大作中提到】 : 这种面试问题首先要明白他想问你什么。要是他就想问你自己怎么实现内存管理,那你 : 就不要怕麻烦,反正也就是动动嘴皮子而已。 : 要说你的方法,其实也是不错的,除了其实不需要这个全局的映射之外。 : 你直接把返回地址和实际地址之间的偏移量存到返回地址前一个字节就行了。 : 你还可以指出如果是实际的问题的话基本上不用自己实现。 : 比如glibc里有memalign和posix_memalign
|