f****s 发帖数: 74 | 1 calxeda的电面就两个人,一人一题。
1. some_struct* p=NULL;
p->some_member;
问会发生什么?答:会编译通过,但运行会出问题,继续问为什么会出问题,怎么样出
问题,扯了os,trap,interrupt一堆。最后又问,没有os的imbeded system怎么处理
?瞎扯了boot loader,硬件interrupt handler什么的。面完上机试了一下,不会出错
,编译器优化了。
2.问memory alignment,如何allocate一块memory总是以64的整数倍地址开始。我就说
naive的方法是用malloc然后检查地址,他所不naive,问怎么样实现,我想了一会说必
须把原有的地址存下来,就多allocate一点把原有的地址存存下来,当用户调用free的
时候就用这个地址。感觉答的还不错,后来写code,出了个bug,经指点,纠正了。
今天收到hr的据信。感觉小公司就问些实际应用的东西,真不容易啊。 |
d**********x 发帖数: 4083 | 2 说说第二题你怎么做的吧
记得当年Google在北京的笔试题就有这个
【在 f****s 的大作中提到】 : calxeda的电面就两个人,一人一题。 : 1. some_struct* p=NULL; : p->some_member; : 问会发生什么?答:会编译通过,但运行会出问题,继续问为什么会出问题,怎么样出 : 问题,扯了os,trap,interrupt一堆。最后又问,没有os的imbeded system怎么处理 : ?瞎扯了boot loader,硬件interrupt handler什么的。面完上机试了一下,不会出错 : ,编译器优化了。 : 2.问memory alignment,如何allocate一块memory总是以64的整数倍地址开始。我就说 : naive的方法是用malloc然后检查地址,他所不naive,问怎么样实现,我想了一会说必 : 须把原有的地址存下来,就多allocate一点把原有的地址存存下来,当用户调用free的
|
f****s 发帖数: 74 | 3 我是这么做的:
void* malloc64(size_t size)
{
void* ptr=malloc(size+64);
void* newptr=(void*)((ptr/64+1)*64));
*(((int*)newptr)-1)=ptr;
return newptr;
}
void free64(void* ptr)
{
void* ptr= (void*)(*(((int*)newptr)-1));
free(ptr);
}
【在 d**********x 的大作中提到】 : 说说第二题你怎么做的吧 : 记得当年Google在北京的笔试题就有这个
|
d**********x 发帖数: 4083 | 4 还是面大公司吧
小公司想要的是一去就能在他们的系统上干活的人。
【在 f****s 的大作中提到】 : 我是这么做的: : void* malloc64(size_t size) : { : void* ptr=malloc(size+64); : void* newptr=(void*)((ptr/64+1)*64)); : *(((int*)newptr)-1)=ptr; : return newptr; : } : void free64(void* ptr) : {
|
f****s 发帖数: 74 | 5 大侠有什么公司推荐不?大公司投了一圈,没人理啊。下午要去面一个contract,一个
小时45块钱那种。之前contract的老印想压到38被我拒绝了
面这种contract需要注意什么不?
【在 d**********x 的大作中提到】 : 还是面大公司吧 : 小公司想要的是一去就能在他们的系统上干活的人。
|
d**********x 发帖数: 4083 | 6 不知道contract是什么样子的。。
加QQ群。。2106889636。。
【在 f****s 的大作中提到】 : 大侠有什么公司推荐不?大公司投了一圈,没人理啊。下午要去面一个contract,一个 : 小时45块钱那种。之前contract的老印想压到38被我拒绝了 : 面这种contract需要注意什么不?
|
f****s 发帖数: 74 | 7 怎么加不进去啊。说没这个号?
【在 d**********x 的大作中提到】 : 不知道contract是什么样子的。。 : 加QQ群。。2106889636。。
|
d**********x 发帖数: 4083 | 8 167615205..
我擦,我不知道刚才贴的是什么。。
【在 f****s 的大作中提到】 : 怎么加不进去啊。说没这个号?
|
f****s 发帖数: 74 | 9 呵呵,请求发送了。
【在 d**********x 的大作中提到】 : 167615205.. : 我擦,我不知道刚才贴的是什么。。
|
j*****y 发帖数: 1071 | 10 void * mymalloc(int size, int align) // align is a power of 2
{
void * p = (void *)malloc(size + align - 1 + sizeof(void *));
void * p1 = (void *)((((int)p) + align -1 + sizeof(void *)) & (~(align
- 1)));
void **p2 = (void **)p1;
p2[-1] = p;
return p1;
}
void myfree(void *p)
{
void **p2 = (void **) p;
free(p2[-1]);
}
【在 f****s 的大作中提到】 : calxeda的电面就两个人,一人一题。 : 1. some_struct* p=NULL; : p->some_member; : 问会发生什么?答:会编译通过,但运行会出问题,继续问为什么会出问题,怎么样出 : 问题,扯了os,trap,interrupt一堆。最后又问,没有os的imbeded system怎么处理 : ?瞎扯了boot loader,硬件interrupt handler什么的。面完上机试了一下,不会出错 : ,编译器优化了。 : 2.问memory alignment,如何allocate一块memory总是以64的整数倍地址开始。我就说 : naive的方法是用malloc然后检查地址,他所不naive,问怎么样实现,我想了一会说必 : 须把原有的地址存下来,就多allocate一点把原有的地址存存下来,当用户调用free的
|
|
|
T*****9 发帖数: 3015 | |
d**********x 发帖数: 4083 | 12 我觉得这个小公司这种风格的话可能是想要在这个基础上谈memory pool的实现
align
【在 j*****y 的大作中提到】 : void * mymalloc(int size, int align) // align is a power of 2 : { : void * p = (void *)malloc(size + align - 1 + sizeof(void *)); : void * p1 = (void *)((((int)p) + align -1 + sizeof(void *)) & (~(align : - 1))); : void **p2 = (void **)p1; : p2[-1] = p; : return p1; : } : void myfree(void *p)
|
j*****y 发帖数: 1071 | 13 再写一个如何实现 malloc, free ?
【在 d**********x 的大作中提到】 : 我觉得这个小公司这种风格的话可能是想要在这个基础上谈memory pool的实现 : : align
|
f****s 发帖数: 74 | 14 calxeda的电面就两个人,一人一题。
1. some_struct* p=NULL;
p->some_member;
问会发生什么?答:会编译通过,但运行会出问题,继续问为什么会出问题,怎么样出
问题,扯了os,trap,interrupt一堆。最后又问,没有os的imbeded system怎么处理
?瞎扯了boot loader,硬件interrupt handler什么的。面完上机试了一下,不会出错
,编译器优化了。
2.问memory alignment,如何allocate一块memory总是以64的整数倍地址开始。我就说
naive的方法是用malloc然后检查地址,他所不naive,问怎么样实现,我想了一会说必
须把原有的地址存下来,就多allocate一点把原有的地址存存下来,当用户调用free的
时候就用这个地址。感觉答的还不错,后来写code,出了个bug,经指点,纠正了。
今天收到hr的据信。感觉小公司就问些实际应用的东西,真不容易啊。 |
d**********x 发帖数: 4083 | 15 说说第二题你怎么做的吧
记得当年Google在北京的笔试题就有这个
【在 f****s 的大作中提到】 : calxeda的电面就两个人,一人一题。 : 1. some_struct* p=NULL; : p->some_member; : 问会发生什么?答:会编译通过,但运行会出问题,继续问为什么会出问题,怎么样出 : 问题,扯了os,trap,interrupt一堆。最后又问,没有os的imbeded system怎么处理 : ?瞎扯了boot loader,硬件interrupt handler什么的。面完上机试了一下,不会出错 : ,编译器优化了。 : 2.问memory alignment,如何allocate一块memory总是以64的整数倍地址开始。我就说 : naive的方法是用malloc然后检查地址,他所不naive,问怎么样实现,我想了一会说必 : 须把原有的地址存下来,就多allocate一点把原有的地址存存下来,当用户调用free的
|
f****s 发帖数: 74 | 16 我是这么做的:
void* malloc64(size_t size)
{
void* ptr=malloc(size+64);
void* newptr=(void*)((ptr/64+1)*64));
*(((int*)newptr)-1)=ptr;
return newptr;
}
void free64(void* ptr)
{
void* ptr= (void*)(*(((int*)newptr)-1));
free(ptr);
}
【在 d**********x 的大作中提到】 : 说说第二题你怎么做的吧 : 记得当年Google在北京的笔试题就有这个
|
d**********x 发帖数: 4083 | 17 还是面大公司吧
小公司想要的是一去就能在他们的系统上干活的人。
【在 f****s 的大作中提到】 : 我是这么做的: : void* malloc64(size_t size) : { : void* ptr=malloc(size+64); : void* newptr=(void*)((ptr/64+1)*64)); : *(((int*)newptr)-1)=ptr; : return newptr; : } : void free64(void* ptr) : {
|
f****s 发帖数: 74 | 18 大侠有什么公司推荐不?大公司投了一圈,没人理啊。下午要去面一个contract,一个
小时45块钱那种。之前contract的老印想压到38被我拒绝了
面这种contract需要注意什么不?
【在 d**********x 的大作中提到】 : 还是面大公司吧 : 小公司想要的是一去就能在他们的系统上干活的人。
|
d**********x 发帖数: 4083 | 19 不知道contract是什么样子的。。
加QQ群。。2106889636。。
【在 f****s 的大作中提到】 : 大侠有什么公司推荐不?大公司投了一圈,没人理啊。下午要去面一个contract,一个 : 小时45块钱那种。之前contract的老印想压到38被我拒绝了 : 面这种contract需要注意什么不?
|
f****s 发帖数: 74 | 20 怎么加不进去啊。说没这个号?
【在 d**********x 的大作中提到】 : 不知道contract是什么样子的。。 : 加QQ群。。2106889636。。
|
|
|
d**********x 发帖数: 4083 | 21 167615205..
我擦,我不知道刚才贴的是什么。。
【在 f****s 的大作中提到】 : 怎么加不进去啊。说没这个号?
|
f****s 发帖数: 74 | 22 呵呵,请求发送了。
【在 d**********x 的大作中提到】 : 167615205.. : 我擦,我不知道刚才贴的是什么。。
|
j*****y 发帖数: 1071 | 23 void * mymalloc(int size, int align) // align is a power of 2
{
void * p = (void *)malloc(size + align - 1 + sizeof(void *));
void * p1 = (void *)((((int)p) + align -1 + sizeof(void *)) & (~(align
- 1)));
void **p2 = (void **)p1;
p2[-1] = p;
return p1;
}
void myfree(void *p)
{
void **p2 = (void **) p;
free(p2[-1]);
}
【在 f****s 的大作中提到】 : calxeda的电面就两个人,一人一题。 : 1. some_struct* p=NULL; : p->some_member; : 问会发生什么?答:会编译通过,但运行会出问题,继续问为什么会出问题,怎么样出 : 问题,扯了os,trap,interrupt一堆。最后又问,没有os的imbeded system怎么处理 : ?瞎扯了boot loader,硬件interrupt handler什么的。面完上机试了一下,不会出错 : ,编译器优化了。 : 2.问memory alignment,如何allocate一块memory总是以64的整数倍地址开始。我就说 : naive的方法是用malloc然后检查地址,他所不naive,问怎么样实现,我想了一会说必 : 须把原有的地址存下来,就多allocate一点把原有的地址存存下来,当用户调用free的
|
T*****9 发帖数: 3015 | |
d**********x 发帖数: 4083 | 25 我觉得这个小公司这种风格的话可能是想要在这个基础上谈memory pool的实现
align
【在 j*****y 的大作中提到】 : void * mymalloc(int size, int align) // align is a power of 2 : { : void * p = (void *)malloc(size + align - 1 + sizeof(void *)); : void * p1 = (void *)((((int)p) + align -1 + sizeof(void *)) & (~(align : - 1))); : void **p2 = (void **)p1; : p2[-1] = p; : return p1; : } : void myfree(void *p)
|
j*****y 发帖数: 1071 | 26 再写一个如何实现 malloc, free ?
【在 d**********x 的大作中提到】 : 我觉得这个小公司这种风格的话可能是想要在这个基础上谈memory pool的实现 : : align
|
a*******3 发帖数: 27 | 27 最安全,最elegant的是posix_memalign,其他各种山寨做法都不太好 |