1. static全局便娘与普通全局变量有什么区别?static局部变量和普通局部变量有什么区别?satic函数与普通函数有什么区别?
static全局变量只初使化一次,防止在其他文件单元中被引用(修改链接属性);
static局部变量只被初始化一次,下一次依据上一次结果值(延长生命期);
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
2.有双向循环链表节点定义为
struct node
{
int data;
struct nod *front, *next;
};
有两个双向链表A,B,知道其头指针为:pHeadA,pHeadB,请写一个函数将两个链表中的data值相同的节点删除
3. 使用自旋锁时应注意哪些方面
1). 自旋锁保护的临界区里,不能有引起睡眠的函数,如kmalloc,copy_from_user等。
因为如果某进(线)程获得锁并进入了临界区,但它却在临界区里睡着了,那么别的需要这把锁的进(线)程将可能要等待一段很久的时间,最坏的情况是死锁。
所以,在自旋锁里的临界区
2). 在LDD3里说到这样的一种情况:
在单CPU环境里,如果某进(线)程获得了锁并准备对它的设备进行存取,此时发生了中断,而中断处理也要对该设备进行存取所以中断处理
3). 自旋锁的持有时间应尽可能的短。因为临界区太大,持有时间太长,其他进程可能面临长时间等待,降低了系统性能。
4.字符串倒序程序,类似将"innos"倒序后变为"sonni",请指出下面代码有哪些错误并修正:
#include//要包含这两个头文件
#include
#include "string.h"
int main(void)
{
char *pDest, *pSrc;
char *src = "neoway";
char *dest = NULL;
int length = strlen(src);
dest = (char *)malloc(length + 1);//多一个空间存储字符串结束符
pDest = dest;
pSrc = src + length - 1;//注意下表从0开始src[length]的值为'\0'
while(length-- != 0)
*pDest++ = *pSrc--;//掉了*
*pDest = '\0';
printf("%s", dest);
free(dest);//这里要释放一下
return 0;
}