一道面试题的思考。。。

来源:本站
导读:目前正在解读《一道面试题的思考。。。》的相关信息,《一道面试题的思考。。。》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一道面试题的思考。。。》的详细说明。
简介:题是一个同学面试时遇见的,他被鄙视了,大家看看自己是否可以过关。

题目如下:

在32位机器上,用你觉得最高效的方法实现memcpy函数。

void*memcpy(void*dest,void*src,unsignedintsize);

大家好好考虑一下这个题 很不容写好的 因为涉及了太多的知识点。

void* memcpy(void* dest, void* src, unsigned int size)  {  unsigned int i;  for(i=0; i<=size; i++)  {  *dest++ = *src++;  }  }  

以上这个 不对,void指针不能运算。

还要检查指针为空的情况。

这个问题,我给同学们说几点,下来大家自己写一下,我会在后面把我的答案贴出来。

作为一个面试官,我觉得这个问题会考察应试这 这几个方面的知识点

(1) 函数的链式调用。大家要注意返回值是void*, 那么这个void*是什么呢?其实就是要返回参数的dest,当然这个dest是已经复制好了的内存

(2) 考虑内存重叠的情况。软件中的多数难搞的bug一般都是这些考虑不足的函数造成的,因为假设不重叠时没问题,重叠时就出错,如何出错法,没人能预料。那么我们使用memcpy时, 不会每次考虑是否重叠的问题,所以这个是函数在实现时要考虑的。

(3)题目明确说明32位机上的高效。那么我们就要考虑总线周期的问题。虽然是C语言的程序,但是编译后还是汇编,还是二进制。在32位机器上,int的效率是最高的,因为每个周期读取数据的时候总是32位,所以你要拷贝一个字节,那么其实还是读取了4个字节,只不过机器会去处理而已。因此我们可以每次拷贝4个字节,这样效率就提高了4倍。但是同时问题又有了,size可能不是4的整数倍,比方对于13,那么就会遗留1个字节出来,这个时候我们必须单独处理,还是读取4个字节,通过位运算符得到我们要拷贝的有效字节。

这个面试题的考点是多了点 要求应试者从硬件到软件都要有比较深的认识才能答全。

我们不可能一点都答不出来 也可能不能答全 但是在学习时应该养成细致周全的思维习惯。

提醒:《一道面试题的思考。。。》最后刷新时间 2024-03-14 00:59:33,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一道面试题的思考。。。》该内容的真实性请自行鉴别。