论述题 3.  线程与进程的区别和联系分别是什么?线程是否具有相同的堆栈?DLL是否具有独立的堆栈?
【正确答案】进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统创建了一个主线程,每个线程有自己的堆栈。DLL(Dynamic Link Library,动态链接库)中是否具有独立的堆栈,这个问题不好回答,或者说这个问题本身就有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是由EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈呢?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈呢?以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以,如果是从DLL中动态分配的内存,最好是从DLL中删除;如果是从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃。
【答案解析】