2013年嵌入式面试题集

常见函数总结

3、memmove

void *memmove(void *to, const void *from, size_t count);

当发生对象重叠时,函数仍能正确执行。

void *memmove(void *dest, const void *src, size_t count)

{

assert( (dest!=NULL)&&(src!=NULL) );

char *tmp_dest=(char*)dest;

char *tmp_src=(char*)src;

if( tmp_dest<=tmp_src||tmp_src+count<tmp_dest )

{// 正向

while(count--)

*tmp_dest++=*tmp_src++;

}

else

{// 反向

tmp_dest+=count-1;

tmp_src+=count-1;

while(count--)

*tmp_dest--=*tmp_src--;

}

return dest;

}

memmove考虑重叠。重叠通常就是三种情况,一是目标区域的首地址落在源区域内;二是目标区域的尾地址落在源区域内;三是两个区域完全重叠。

从结果上来看,只有第一种情况才有可能发生与预期不相同的结果。这时候memmove通常使用反方向复制的方法,从源区域的尾地址开始复制,这样就能避免出现已复制的数据被后续复制覆盖的错误。

常见面试题总结

1. 什么是预编译,何时需要预编译:

答: 就是指程序执行前的一些预处理工作,处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等

4.c和c++中的struct有什么不同?

答: c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private.

5.进程之间通信的途径

答 socket(套接字),共享存储,管道,消息队列,信号量,信号

7进程和线程区别

一个进程至少有一个线程,线程共享进程资源

进程是独立的,线程运行在进程空间。

8 ARM流水线

你可能喜欢

  • 嵌入式软件工程师笔试题
  • 嵌入式工程师面试题
  • 嵌入式C语言
  • 程序员面试题
  • 数据结构算法面试题
  • 语言分析

2013年嵌入式面试题集相关文档

最新文档

返回顶部