- 5 -
29.ISO 的七层模型是什么?
tcp/udp 是属于哪一层? tcp/udp 有何优缺点?
答案:应用层 表示层 会话层 传输层 网络层 链路层 物理层 ;
tcp /udp 属于传输层 ;
TCP 服务提供了数据流传输、 可靠性、有效流控制、 全双工操作和多路复用技术等。 与 TCP
不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比
较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。 tcp: 提供稳定的传输服务,有
流量控制,缺点是包头大,冗余性不好 udp: 不提供稳定的服务,包头小,开销小
30: (void *)ptr 和 (*(void**))ptr 的结果是否相同?其中 ptr 为同一个指针
答案: .(void *)ptr 和 (*(void**))ptr 值是相同的
31:
int main()
{
int x=3;
printf("%d",x);
return 1;
}
问函数既然不会被其它函数调用,为什么要返回 1?
答案: mian 中, c 标准认为 0 表示成功,非 0 表示错误。具体的值是某中具体出错信息
32 要对绝对地址 0x100000 赋值,我们可以用 (unsigned int*)0x100000 = 1234; 那么要是想
让程序跳转到绝对地址是 0x100000 去执行,应该怎么做?
答案: *((void (*)( ))0x100000 ) ( ); 首先要将 0x100000 强制转换成函数指针 ,即: (void
(*)())0x100000 然后再调用它 : *((void (*)())0x100000)(); 用 typedef 可以看得更直观些 :
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();
33,已知一个数组 table,用一个宏定义,求出数据的元素个数
答案 : #define NTBL(table) (sizeof(table)/sizeof(table[0]))
34。线程与进程的区别和联系 ? 线程是否具有相同的堆栈 ? dll 是否有独立的堆栈 ?
答案: 进程是死的, 只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的
时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。 DLL 中有没有独立的堆
栈,这个问题不好回答,或者说这个问题本身是否有问题。因为 DLL 中的代码是被某些线
程所执行, 只有线程拥有堆栈, 如果 DLL 中的代码是 EXE 中的线程所调用, 那么这个时候
是不是说这个 DLL 没有自己独立的堆栈?如果 DLL 中的代码是由 DLL 自己创建的线程所
执行, 那么是不是说 DLL 有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每个 DLL 有
自己的堆,所以如果是从 DLL 中动态分配的内存,最好是从 DLL 中删除,如果你从 DLL
中分配内存,然后在 EXE 中,或者另外一个 DLL 中删除,很有可能导致程序崩溃
35。