今年面试了好几个gpu设计公司,忘记是沐曦科技还是摩尔线程的面试,问了一个经典问题值得记录一下,这是amazon的面试题。我当时上班上的有点懵了,临场发挥回答说申请一个hash表存放4k指针对应的真实指针。。。
题目
实现malloc4k和free4k函数
- 封装系统malloc和free
- malloc4k总是返回4k对齐的内存地址
- free4k传入4k对齐的内存地址释放内存
答案
1 |
|
- (size + PAGE_SIZE - 1) 用来分配size大小的空间,如果size未对齐,最多需要后移(4k-1)的offset。因此为了4k对齐,多申请了(4k-1)的空间。
- sizeof(uintptr_t) 用来存放真正malloc拿到raw指针。
- aligned 地址怎么计算非常有技巧性,首先后移sizeof(uintptr_t),地址通过 (A + 4k - 1) & (4k - 1) 拿到该地址的4k上界,这种形式在系统编程中非常常见。
- aligned地址前面存真正的raw地址。
1 | void free_4K_aligned(void *ptr) { |
- 解引用raw地址
- free释放
reference
https://leetcode.com/discuss/post/125031/amazon-interview-malloc32-align-space-re-7bd6/
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章